需要学习安卓逆向的可以加群:692903341
1.编写目的
记录破解so库并进行修改其中的字符串信息的相关流程.
2.使用工具
逆向工具: IDA 6.8 , Jadx , AndroidKiller
运行环境:Nexus 5 (Android 4.4)
3.原字符串信息
4. 实现流程
4.1 使用adb命令定位字符串位置
1.手机打开字符串所在界面
2.手机连接电脑
3.在cmd中输入”adb shell dumpsys activity top”查看当前顶层界面所在app的工程位置
结果:
目标所在位置 : ”com.glj.dynamicregistration/.MainActivity”
4.2 使用Jadx对APP进行逆向分析
Jadx工具分析完后打开包名”com.glj.dynamicregistration”下的”MainActivity”
4.3 定位字符串显示位置
1.在onCreate中只有一个TextView从getText()函数中获取字符串,再看getText()函数是经过native修饰的.那么可以肯定这是一个jni函数.再看Activity中确实加载了一个”hellojni”的so库,那么我们基本上定义这是从so库中获取的字符内容.
4.4 获取so库
将app的apk格式改为zip压缩包格式后打开,在lib目录下进行扣取
4.5 IDA加载so库静态分析
4.6 使用IDA的查看so库中的字符串信息
1.Strings window打开流程:View->open subviews->Strings
2.打开后发现所需要的字符串.
3.亦可使用Ctrl+F进行关键字搜索
4.7 双击搜索结果的字符串,跳转到所在代码的位置
4.8 在IDA中定位该数据所在hei view中的位置
1.选中.rodata:00002988中的字符串信息
2.选择标题栏View-> open subviews->Hex dump进入Hex View窗口
3.下图蓝色部分就是目标字符串的字节码数据
4.9 字符串信息修改
改前中文字符串:
你好,我是JNI的动态注册方式!
对应UTF-8编码:
E4 BD A0 E5 A5 BD 2C E6 88 91 E6 98 AF 4A 4E 49
E7 9A 84 E5 8A A8 E6 80 81 E6 B3 A8 E5 86 8C E6
96 B9 E5 BC 8F 21 00
改后中文字符串:
嘿嘿,已经被修改了!
对应UTF-8编码:
E5 98 BF E5 98 BF 2C E5 B7 B2 E7 BB 8F E8 A2 AB
E4 BF AE E6 94 B9 E4 BA 86 21 00 00 00 00 00 00
00 00 00 00 00 00 00
将光标放到目标数据的第一个数据出右击选择Edit进行数据修改
经过修改后的数据然后保存
4.10 数据修改完成后重新生成so库
扫描二维码关注公众号,回复:
11545881 查看本文章
1.在工具栏中选择Edit->Plugins-> modifyfile进行生成新的so库
2.在弹出的更改文件弹窗中选择确定更改
3.保存文件
4.11 使用新的so库进行回编APP操作
1.打开AndroidKiller工具逆向加载APP
2.将新的so库替换旧的so库
3.进行回编
5.结果显示