2014ali crackme2

2014ali crackme2_第1张图片
image.png

一个密码破解


2014ali crackme2_第2张图片
image.png

jni层做了加密


2014ali crackme2_第3张图片
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

2014ali crackme2_第4张图片
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块中

2014ali crackme2_第5张图片
image.png
2014ali crackme2_第6张图片
image.png

这时候就跳到linker上面了

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

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

2014ali crackme2_第7张图片
image.png

1b9c

2014ali crackme2_第8张图片
image.png

b3ba4000

image.png

相加如上

2014ali crackme2_第9张图片
image.png

打个断点

2014ali crackme2_第10张图片
image.png

会发现从这个地方会退出

2014ali crackme2_第11张图片
image.png

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

2014ali crackme2_第12张图片
image.png
2014ali crackme2_第13张图片
image.png
2014ali crackme2_第14张图片
image.png

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

2014ali crackme2_第15张图片
image.png

打上断点

调试到最后这个cmp

2014ali crackme2_第16张图片
image.png

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

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

2014ali crackme2_第17张图片
image.png

可以看到是aiyou,bucuoo

你可能感兴趣的:(2014ali crackme2)