逆向专栏

2014ali crackme2

2019-08-20  本文已影响0人  超威蓝猫l
image.png

一个密码破解


image.png

jni层做了加密


image.png

伪代码层是这样的

接着来动态调试。双开ida。然后attach上之后整个app就会闪退

如何查看是否被调试呢

adb shell 下 ps|grep com.yao 包名。。
其中TracePid就是被调试的pid

检测机制最早的两个时机是.init_array 和Jni_onload

.init_array是最早加载的一个段信息。现在一般的so解密都是在这里的。
jni——onload是在system.loadlibrary调用时执行。执行时机要早于native方法 但是晚于.init_array

所以ida在attach的时候在debugger中选择debugger option 中勾选suspend on library load/unload

image.png

adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity

进入调试状态

但是这里会发现没有rx权限的so文件
毕竟还没有走system。loadlibrary

这时候用jdb命令去attach 等待的程序

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

注意这里的apk包要debug模式 加在application块中

image.png image.png

这时候就跳到linker上面了

这时候我们静态找到jni onload的地址
动态找到基地址

相加找到具体的jni onload的地址

image.png

1b9c

image.png

b3ba4000

image.png

相加如上

image.png

打个断点

image.png

会发现从这个地方会退出

image.png

然后从静态那边找到地址是1c58
不过这边我不是很确定怎么找 onload里面有两个blx 其中一个下面有一个函数调用。估摸着是这么找的

image.png image.png image.png

改一下
然后替换 打包一个新apk

image.png

打上断点

调试到最后这个cmp

image.png

发现会跳转到下面的函数 那么断定这里就是密码比较的地方

cmp比较的是r3寄存器的值 值采用的是寄存器寻址方式 即r2的地址

image.png

可以看到是aiyou,bucuoo

上一篇 下一篇

猜你喜欢

热点阅读