freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

基于AliCrackm.apk逆向实战
2021-10-26 19:49:45

本篇文章主要针对AliCrackm.apk程序逆向分析实战进行了描述,也是针对Android逆向中的动态调试以及反反调试技术的一个练习和实战。

打开程序,输入验证码提交后提示校验失败,

利用jadx_gui打开,代码逻辑为输入验证码传入so库,校验成功加载ResultActivity,否则弹出验证码校验失败,

将apk文件后缀修改为zip,解压后将lib下的so文件拖入IDA分析,

先看Java_com_yatong_crackme_MainActivity_securityCheck,

查看代码逻辑上边两个if循环中byte_6359和byte_635A,没有什么重要的逻辑,下边GetStringUTFChars将string类型转换为char,将返回值给v5,下边是off_628C的返回值给v6和一个while循环,

查看代码逻辑上边两个if循环中byte_6359和byte_635A,没有什么重要的逻辑,下边GetStringUTFChars将string类型转换为char,将返回值给v5,下边是off_628C的返回值给v6和一个while循环,

发现字符串“aWojiushidaan”,提交测试发现不是答案,对while分析发现是一死循环,因此初步判断可能off_628C可能是验证码校验逻辑,查看地址为12A4,

该静态注册分析完发现还有一个JNI_Onload动态注册,继续分析,

可以看到一个if循环,下边有sub_16A4和sub_17F4两个函数,继续分析sub_17F4,

可以看出一些字段都进行了加密,无法看出其中内容,继续查看sub_16A4,发现分别有sub_130C和dword_62B0,进行查看也进行加密,

因为该动态注册中的字段都进行了加密,无法查看,因此可能程序运行后会进行解密,接下来考虑动态调试。

因为要动态调试,因此利用AndroidKiller打开apk,在AndroidManifest.xml中添加android:debuggable="true",然后进行重新编译,这个时候就支持调试了,

安装重新编译后的apk,

将IDA中的android_server push到模拟器上,

adb连接模拟器,并切换root账号,

进入/data/loacal/tmp下给android_server修改权限,

运行android_server,

端口转发,并挂起该程序,

打开IDA,Attach该程序,

点击ok,

选择该程序包名,点击ok,加载完成后勾选对应的选项,

F9运行,并加载该程序,

Module list查看加载so库,

Libcrackme.so加载完成,选择静态注册调试,

F9进行运行程序,

程序崩溃,那么可以判断该程序有反调试,可以判断JNI_Onload则为反调试代码逻辑,

选择JNI_Onload进行加载,

在JNI_Onload处下断点,

F9运行到该断点处F8向下执行,在静态分析时可以判断处有个if循环跳转,因此当向下执行到BLX R0时则F7进入,看一下内部的代码逻辑,

数据窗口跟随R0,

F8单步向下执行,可以看到dlsym以及getpid,因此可以判断是对字段进行解密,

继续向下,可以看到创建线程以及杀死进程一些列字段,那么这边便可以判断该so库代码该so库中是一个检测程序是否被调试,如果调试则中断程序的作用,

再向下便跳出了给函数,

至此该if循环代码分析完成,

继续向下可以看到sub_16A4和sub_17F4,

那么在动态调试窗口向下翻便可以看到sub_AB85B7F4,因此BLX和BL对应静态分析中的sub_16A4和sub_17F4,那么在BLX R7下断点,

将程序执行到该断点处,

进入其内部代码逻辑,可以看到sub_AB85B6A4和loc_AB85B6B8,

那便是静态分析中对应的sub_130C和dword_62B0,

通过调试验证该loc_AB85B6B8中的BL便是不断的执行进程检测调试的关键,

因此将该BL处直接NOP掉,

F2修改完成之后继续进入静态注册进行校验逻辑调试,

进入后P一下代码逻辑,

通过之前的静态分析判断处该校验逻辑在B2A4处,那么在该地址上一处下断,

F9运行到该断点,程序启动,随意输入一串字符,进行验证,

F8单步向下执行,

单步过之后进入可以看到将值给了R2,因此进入R2查看数据,看到一串字符aiyou,bucuoo,

在程序输入验证,

程序校验成功,成功获取到flag,至此针对该app的逆向分析就完成了,在本次分析中涉及 到smali代码的分析、so层代码的静态分析、IDA的动态调试以及反调试等方面的知识,也是对多方面知识的一个练习和 实战巩固。

# 移动安全 # CTF # 移动App
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者