教我兄弟学Android逆向07 IDA破解第一个so

上一篇 《教我兄弟学Android逆向06 用AndroidStudio编写第一个so》我带你用AS编写了第一个so 现在回顾一下 首先我创建了一个myJNI类 里面包含一个Native的sayHello方法 这个方法在native层返回一句话 hello 52pojie! 然后我在java层通过Log函数调用并输入了sayHello方法完成了第一个so的编写。
课程写到这我已经不再是面向威一个人了 有很多同学私信我问威学的怎么样了 找到工作了吗 其实威已经找到了逆向的工作 待遇还不错 今年七月份回学校拿毕业证 现在正在忙着写毕业论文等学校一堆的事情 当然他学的并不止这些东西。 虽然威找到了工作 但是应很多同学的要求课程还会继续更新 后面我还会陆续放出来一些课程。
希望同学们好好学习 认真学习的人都能找到满意的工作。  
教我兄弟学逆向系列课程中的每一课我认为均是一个框架 这是一个抛砖引玉的过程 课程中我不会把东西讲的这么细 我只会教给大家一种破解的思路和实现方式 具体原理请自行百度。

要么学!要么不学!学和不学之间没有中间值 不学就放弃,学就要去认真的学!    --致选择

本节课给你带来的是so的破解 本节课用到的例子是上节课我带你做的Demo 题目是更改Native方法sayHello的返回值 让它原来返回的hello 52pojie!变成hello world!
那么开始今天的课程。

本节课所有到的工具和Demo
IDA
链接:https://pan.baidu.com/s/15uCX8o6tTSSelgG_RN7kBQ 密码:ftie
第六课Demo
链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ 密码:u1an

一 解包
1.使用apktool解包app-debug.apk  
2.关于apktool的使用请看番外
https://www.52pojie.cn/thread-732007-1-1.html

二 打开so文件
1.进入解包后的lib目录找到libJniTest.so并用IDA打开
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so


2.点两次OK进入此页面 点新建
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

3.找到so并打开它 因为我的机型是支持arm的所以我这里打开的是armeabi文件夹下的so 如果机型是x86模式的那么这里要打开x86模式下的libJniTest.so
armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
x86: 平板、模拟器用得比较多。
x86_64: 64位的平板。
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

4.点击打开后会有几个弹框 全部点OK会进入到这样一个界面 说明so已经打开
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

三 找到字符串hello 52pojie!并修改为hello world!
1.按住键盘组合键 shift + f12 打开字符串窗口  这个窗口将会列举出so中所包含的所有字符串 因为上节课我们只编写了一个字符串 所以这里只有一个hello 52pojie! 如果打开的是x86的so这里还会有一些.so 但是字符串只有这一个
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

2.双击进去将会找到hello 52pojie!的内存地址
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

3.鼠标点在hello 52pojie!字符串上,打开 Hex dump窗口,修改hello 52pojie!对应内存地址的内容
关于字符对应的16进制可以在百度百科搜索ascii码表 找到字符所对应的16进制
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

4.因为我要把hello 52pojie!修改成hello world! 是不是只要找到每个字符所对应的hex修改就好了
这里我看到 hello 52pojie!对应的hex是:68 65 6C 6C 6F 20 35 32 70 6F 6A 69 65 21
我在ascii码表上找到world所对应的十六进制是:77 6F 72 6C 64
所以hello world! 对应的十六进制是:68 65 6C 6C 6F 20 77 6F 72 6C 64 21

5.找到所要修改的字符所对应的16进制 右键Edit
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

6.由于52pojie!比world!多两个字符 这里把多出来的置为00 修改好后 右键Apply changes应用
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

7.保存修改好后so
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

8.点击确定后 把修改后的so储存到一个位置
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

四 替换so并重打包
1.关闭ida 并把armeabi和armeabi-v7a下的libJniTest.so替换成修改后的so 注意这里两个文件夹下的so都要替换  同理 如果是x86模式的 这里要替换x86文件夹的so
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

2 替换so后把app-debug文件夹用apktool命令重打包成new.apk 并进行签名 生成签名后的new_sign.apk
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

3.将new_sign.apk安装到手机 运行 查看Log成功显示hello world! so破解成功
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so

五.总结
本节课首先下载了ida这款逆向神器   然后通过ida修改so的16进制 成功的将hello 52pojie!修改成了hello world! 完成了对第六课的破解 。


课后作业
1.完成第六课的课后作业并破解它
2.看完《IDA Pro权威指南》前六章
书籍链接:https://pan.baidu.com/s/1zHkHbeaGZ6wfeRR20Gav-A 密码:3vnu


下一篇:《教我兄弟学Android逆向08 IDA爆破签名验证

上一篇:linux动态链接库的使用


下一篇:Android 常见的壳特征