首页
社区
课程
招聘
[分享]静态分析-IDA绕过so层root检测
2022-2-2 15:32 6050

[分享]静态分析-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直播授课

收藏
点赞3
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回