-
-
[分享]静态分析-IDA绕过so层root检测
-
2022-2-2 15:32 6050
-
0x1 ida在安卓逆向中的作用
1.介绍
在安卓开发中,有些功能是通过C/C++实现的,编译之后为so结尾的可执行文件,放在apk的lib目录中,通过android killer反编译之后只能看到java代码,要分析so的逻辑,需要通过ida对其反编译。
0x2 jni概念
1.介绍
JNI是Java Native Interface的缩写,通过使用Java本地接口编写C/C++代码,可以确保代码在不同的平台上移植,对逆向工程师来说,逆向so的难度要高于逆向java。
0x3 IDA功能
1.介绍
1)静态分析可执行文件(pe, elf, so, MachO)
2)动态调试可执行文件
0x4 实战
1.把程序实例拖进Androidkiller工具,打开AndroidManifest.xml文件,找界面入口点:
1 2 3 4 5 6 | <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> |
2.找到com.kanxue.kctfso包下面的MainActivity文件,打开smali文件
1 2 3 4 5 | .method public constructor <init>()V .method public static native isroot()V .method static constructor <clinit>()V |
似乎进行了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检测了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课