-
-
[分享]静态分析-IDA绕过so层root检测
-
发表于: 2022-2-2 15:32 7113
-
1.介绍
在安卓开发中,有些功能是通过C/C++实现的,编译之后为so结尾的可执行文件,放在apk的lib目录中,通过android killer反编译之后只能看到java代码,要分析so的逻辑,需要通过ida对其反编译。
1.介绍
JNI是Java Native Interface的缩写,通过使用Java本地接口编写C/C++代码,可以确保代码在不同的平台上移植,对逆向工程师来说,逆向so的难度要高于逆向java。
1.介绍
1)静态分析可执行文件(pe, elf, so, MachO)
2)动态调试可执行文件
1.把程序实例拖进Androidkiller工具,打开AndroidManifest.xml文件,找界面入口点:
2.找到com.kanxue.kctfso包下面的MainActivity文件,打开smali文件
似乎进行了root检测,但是定义了native关键字,一个Native Method就是一个java调用非java代码的接口,上下翻动,看不到if指令,这种就没办法从java层绕过了。
3.将apk文件后缀名改成zip,用压缩软件打开,找到lib目录,以为模拟器是x86,32位的,所以去对应的目录下找到so文件,然后使用IDA加载。
4.找到java开头的,这个通常就是JNI函数,打开后是汇编代码,看不懂不要紧,F5反编译一下,就能看到伪代码了,还是回到反汇编模式,按一下空格键,查看函数流程图。
5.这里的cmp,jz对应的就是if指令,点edit,patch,Assemblem Instruction,修改jz为jnz,逻辑反转,改完之后再点edit,patch,apply patch保存一下。
6.关掉IDA,改后的so文件放回去,然后打开AndroidManifest.xml,找到android:extractNativeLibs="false",将false改成true,编译的时候才会加载我们本地的so文件,重新打包编译一下,重新安装,打开app。
7.app成功打开,可以看到已经绕过root检测了。
<activity android:name
=
"com.kanxue.kctfso.MainActivity"
>
<intent
-
filter
>
<action android:name
=
"android.intent.action.MAIN"
/
>
<category android:name
=
"android.intent.category.LAUNCHER"
/
>
<
/
intent
-
filter
>
<
/
activity>
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [分享]hook框架-xposed安装使用 14414
- [分享]hook框架-objection使用 8549
- [分享]hook框架-frida绕过app签名校验 17353
- [分享]hook框架-frida安装 7635
- [分享]动态调试-ida绕过native层反调试 12316