Android逆向08 IDA爆破签名验证

2021-11-26 10:39:58 浏览数 (1)

关于apk的签名我想你一定不生疏 apk假如被反编译 那么原有的签名将不会保存 假如你要想对反编译后的apk重新打包 那么就要对apk重新签名才干装置到手机上。 经过百度晓得一个apk只要一个签名 而且这个签名是必需存在的 不然你这个apk就不能装置到手机上 。

大兄弟你别着急,还记得李华吗?我们儿时的小伙伴 ,有点事想请你帮助。

上面引见一下李华 李华是一个很有天赋 的Android程序员 他用了半年工夫千辛万苦,挑灯夜战,摧枯拉朽的编写了一款黑宝宝游戏 当然这几个词描述的并不恰当 但是李华的确为了这个apk的上线付出了很多努力 谁知游戏刚一上线就被破解了,生不生气?难不忧伤? 汲取了这次的经验 李华决议要还击 他经过书籍 理解到一个apk只要一个签名 于是他有了一个很大胆的想法: 假如他人要破解我的apk他一定会对我的apk停止重打包 但是重打包后的签名就不是我原来的签名了 我可以在代码中判别 假如签名不是我的签名 那么就让顺序加入 这样不就到达避免他人破解的目的了,哈哈哈 太佩服我本人了。


他晓得你最近在学习Android逆向 他想在游戏上线前让你测试一下他新加的签名验证能否能防住他人的破解。 上面是李华编写的黑宝宝apk 链接:https://pan.baidu.com/s/1h6pX2ARE3qtiKiYbcnJ-3g 密码:duv5


你拿到这个apk直接反编译重打包后装置到手机上,刚一运转顺序就加入,你懵了,明明我什么都没改!接着看了一会反编译后的代码说: 他的签名验证是写在so外面的 但是我不会so的破解 大哥你教教我吧!

我说:好吧!

上面开端本节课的课程 请同窗们仔细听课。


一 翻开导出表窗口(Exports)

  • 1.用apktool解包apk后用IDA翻开libJniTest.so
  • 上面引见两个窗口:
  • (1)Exports窗口是导出表(so中能让内部调用的函数)
  • (2)Imports窗口是导入表(so调用到里面的函数)
  • 2.经过剖析java层晓得顺序调用了一个native层函数check 既然晓得了Exports窗口能罗列出so中被内部调用的一切函数 又晓得natve函数check是在java层被调用的
  • 所以翻开导出表窗口 搜索check 经过第6课晓得 so中的函数都是java_包名类名_办法名格式的 所以这里check函数就被找到了
  • 3.双击出来检查check办法 并按键盘f5将汇编转换成C语言 但是这里看到好多中文乱码 此时按住alt A键翻开ASCII string style窗口
  • 然后点击set default encodings 在弹出框中选择8-bit的change 选择utf-8后点击ok回到c言语界面按f5刷新一下界面 乱码成绩处理
  • 4.乱码成绩虽然处理了 但是上面的代码可读性很差 此时需求导入jni.h文件 点File->Load file->Parse C header file 找到jni.h所在位置 点翻开 此时显示Compilation successful 导入成功
  • 下载链接:https://pan.baidu.com/s/1n16NEx67zLHfGtVpU-CKAA 密码:7xg6
  • 5.点击函数第一个参数int 右键Convert to struct* 在弹出的框中选择_JNIEnv点ok后可以看到有一些函数曾经显示出来了
  • 6.虽然如今上面曾经显示出来一些函数 但是可读性还是差一点 为了让代码可读性更好 选中上面的函数 右键Force call type
  • 7 其他的函数也都这样做 然后点住a1按住n键重命名为env 至于为什么这样做 这不是本节课的重点 当前的课程中会讲到的
  • 8.当前的课程会有JNI的编写 所以这里就不带你剖析了 由于本节课的重点是破解 点击回到汇编视图 然后按空格键转化为图形视图 经过图形视图可以对apk的整个逻辑一览无余 快捷键ctrl 鼠标滑轮可以减少办法视图
  • 9 经过图形视图很明晰的可以看出 假如签名正确顺序经过BNE指令跳到左视图顺序继续执行 否则跳到右视图加入顺序
  • BNE: 数据跳转指令,标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处
  • BEQ: 数据跳转指令,标志寄存器中Z标志位等于零时, 跳转到BEQ后标签处 这两条汇编指令相当于smali外面的if-eqz,if-nez是相反的
  • 10.经过下面的剖析 如今你晓得怎样改了吧 没错就是把BNE改成BEQ 让顺序在签名错误的状况下还能继续执行 鼠标选中BNE执行按住空格键 前往到汇编视图 经过上一课你晓得修正so就是改16进制 经过鼠标点住BEQ 可以看到BEQ命令对应的16进制是D0 那么这里只需把BNE那行命令BNE对应的16进制改成D0是不是就可以把命令BNE换成BEQ了
  • 11 鼠标点住BNE那行命令 View->Open subviews->Hex dump翻开16进制编辑 把BNE
  • 12回到汇编窗口可以看到BEN曾经被改成了BEQ
  • 13 保管so 然后重打包 用Androidkiller给apk停止签名 装置到手机上顺序正常运转 成功爆破签名验证 这里就不必我多说了吧 不会做的本人回去看上一节课

二 总结

本节课我带你看法了apk的签名验证 然后经过李华给你测试的apk又熟习了IDA的运用 理解了IDA的导入和导出窗口接着又学习了两条汇编指令 总体来说从这节课你收货的东西还是挺多的 本节课看不懂的知识一定要本人去百度 不要有教师不讲本人就不学习了这种态度。

0 人点赞