《教我兄弟学Android逆向11 动态调试init_array》

上一篇 《教我兄弟学Android逆向10 静态分析反调试apk》我带你用jeb+IDA静态分析了反调试apk,并且了解了init_array和jnionload的执行顺序 通过静态patch的方法 我们过掉了反调试验证,但光是静态patch似乎还不过于完美  有时候还需要配合动态调试来达到破解的目的 基于上节课你表现良好 那么这节课我将为你带来动态调试init_array的教程 注意认真听课不要眨眼睛呀!

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

环境:IDA7.0  手机:nexus

本节课的内容和上节课相关联 班级新来的同学请从上节课开始学起

开始本节课之前你需要先去了解IDA动态调试的相关方法和技巧

Android IDA So的动态调试大法_android ida .so_不知世事的博客-CSDN博客

现在课程开始 请同学们回想一下上节课我给出的两种过反调试的方法

1.改android端口号,android_serve的名称和修改内核的方式绕过tracepid的检测

2.通过修改thread_function函数, SearchObjProcess函数和checkport函数的ARM指令来达到静态patch的目的

这节课我将给你带来第三种过反调试的方法 也就是动态调试其实方法和第二种雷同 只不过是把静态patch换成了动态 

一.关键函数下断点

1.找到init_array段里面的函数thread_function 并在其第一条ARM指令上面按F2下断点

2.在JNI_OnLoad函数调用SearchObjProcess处下断点 (c代码窗口和汇编指令窗口快速转换按Tab键)

3.动态注册的函数sub_1174第一条指令下断点

二 动态调试

1.打开Android Device Monitor

2.运行android_server

/data/local/tmp/android_server

3.端口转发

adb forward tcp:23946 tcp:23946

4.因为我们要调试init_array所以需要在程序刚启动的时候进行调试 如果你对这条指令不熟悉 复习下第四课吧  《教我兄弟学Android逆向04 动态调试smali代码 》

启动程序am start -D -n demo2.jni.com.myapplication/.MainActivity

5.附加进程 

6.附加完成后 如果IDA弹框直接点Yes Debugger option设置一下 因为我们里面会调试到线程所以线程打一个钩 

7.上一步完成后F9运行程序 在IDA等待的时候运行命令

jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost

8.点击完same后程序会断在一个点 不要理会 直接F9(如果弹出框都点Yes) 直到程序断在了我们的断点处 并将函数第二条ARM指令改成POP让函数不执行直接出栈  或者把下面调用exit对应的HEX改成00 00 00 00都是可以的

9.IDA继续F9让程序运行起来  直到程序断在我们下的第二个断点处 ARM指令BL是调用函数的意思 所以将其指令对应的HEX改成00 00 00 00 无意义的指令 直接patch掉达到让其不调用的目的 注:ARM指令不是本节课的重点,关于ARM指令的教程以后的课程会有讲到.

10.IDA继续F9 这时会来到我们下的第三处断点,注意这里是动态注册的函数 对于动态注册的函数我们就不能通过把第二条ARM指令改成POP直接出栈 否则程序会崩溃 那这里怎么改呢?这里可以直接把调用exit退出对应的HEX改成00 00 00 00来过掉

11.到此这三处反调试就都过掉了 现在F9运行遇见 弹框都点确定 然后程序弹框 恭喜你挑战成功!

三 总结

本节课我带你用IDA动态调试了init_array段和JNI_OnLoad里面的方法 并且熟悉了常用的两种patch方法 如果你不想让so中的某一个函数执行 可以直接把这个函数的第二条ARM指令改成POP出栈 但是有一点需要注意 对于动态注册的函数是不可以这样修改的,否则程序会发生异常退出。也可以找到其调用处直接将其对应的HEX改成00 00让其不调用。到此Android逆向基础部分已告一段落,希望大家对课程里面讲解的知识多多练习 毕竟师傅领进门 修行在个人嘛。  下节课我将会带你走进Hook的世界。

四.课后作业

1.了解Xpose的使用

2.搭建Xpose环境,尝试编写Hook代码

五.学习交流群

点击这里进群

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值