“AliCrackMe“过反调试

1.把apk拖进模拟器
在这里插入图片描述获取一个密钥
2.使用jadx-gui打开apk
主界面是我们的Launcher 我们打开AndroidMenifest.xml文件 找到主界面
在这里插入图片描述

3.简单分析一下Java代码
在这里插入图片描述

4.该方法实现在so层 我们来分析一下SO
在这里插入图片描述

5.使用IDA工具打开libcrackme.so
在这里插入图片描述
有动态注册 和 静态注册
6.我们先看静态注册吧
点进去F5一下
在这里插入图片描述
我们把方法参数 帮他改一下 这样代码看起来更完整(第三个参数 根据我们的密码它是字符串类型 然后添加为字符串类型)在这里插入图片描述

首先看到它的最后 要么返回1 要么返回 0 再根据Java层定义的那个native方法为bool类型 估计大概密钥就在这块了
7.我们来仔细分析一下这个逻辑在这里插入图片描述
这边V4通过GetStringUTFChars函数 传给v5
v6=off_628C off_628C我们点进去 发现一个字符串 aWojiushidaan
在这里插入图片描述
以为幸福来得这么突然 一下子就找到了 将密钥输进去 发现不对
8.我们来动态调试一下
调试步骤在这块就不细讲了

1~创建模拟器(有真机可以忽略这个) 要记得打开ddms(要不然后面会报错)
2~在IDA里面找到android_server(dbgsrv目录)
3~把android_server文件放到手机/data/local/tmp
    adb push 文件名 /data/local/tmp/as
4~打开一个cmd窗口:运行android_server
    1)adb shell 连接手机
    2)给一个最高权限:su
    3)来到/data/local/tmp:cd /data/local/tmp
    4)给androi_server一个最高的权限:chomd 777 android_server
    5)查看android_server是否拥有权限:ls -l
    6)运行andorid_server: ./android_server(端口号默认是:23946)
    补充:运行andorid_server并且修改端口号:./android_server -p端口号
5~端口转发:
    adb forward tcp:端口号 tcp:端口号(之前转发的端口号是什么,这里就是什么)
        adb forward tcp:23946 tcp:23946
6~打开DDMS:观察程序的端口号
7~挂起程序:
    adb shell am start -D -n 包名/类名
    例子:adb shell am start -D -n com.example.javandk1/.MainActivity
         adb shell am start -D -n com.yaotong.crackme/.MainActivity
    补充:此时观察DDMS,被调试的程序前面有一个红色的虫子;
8~IDA里面勾选三项
    1)打开ida,选择debugger -第二项-Remote ARMlinux(第四项)
    2)添加hostname和portt:
        hostname:主机号(默认127.0.0.1)
        port:端口号(之前android_server运行时的端口号或者端口转发的端口号)
    3)出来进程列表:选择要调试的程序(可以ctrl+f,搜索包名)
    4)进来后,勾选三项:
    Suspend on process entry point程序入口点 断下
    Suspend on thread start/exit线程的退出或启动 断下
    Suspend on library load/unload库的加载和卸载 断下
补充:可以直接在这里F9(左上角有一个三角形)运行程序,然后放手;
         也可以,直接执行第九步,然后IDA运行程序
9~挂载、释放(放手)
    jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号
    补充:此时观察DDMS,被调试的程序前面有一个绿色的虫子;
 

我们到刚刚分析的Java静态方法那块下个断点
在这里插入图片描述

按F9
在这里插入图片描述
9.程序崩掉了 应该是有反调试了 我们来静态分析看看Java_com_yaotong_crackme_MainActivity_securityCheck这个函数
在这里插入图片描述
没找到什么异常 再根据 我们是刚进入到该函数 就触发了反调试 估计在动态注册里面
10.动态注册分析 就是一些数据操作 这些代码当中 sub_17F4比较扎眼 点进去看一下 大概反调试的点十有八九在着块了
在这里插入图片描述
在这里插入图片描述
11.再来动态调一下这个动态方法在这里插入图片描述

12.我们根据之前分析的伪代码 和动态调试的伪代码进行分析比较 会找到程序大概的汇编代码位置 方便我们下断点在这里插入图片描述
13.开始调试
我们按F7一路跟在这里插入图片描述

会跟到F7 F7会进入到一个线程 再往下走就会崩(以测 就不写出来了)
我们需要做的事就是把它nop掉
14.nop掉之后 我们发现我们的app也是处于运行状态(动态调试用的是真机)在这里插入图片描述

15.我们现在开始调试Java_com_yaotong_crackme_MainActivity_securityCheck这个函数
在函数开始处下一个断点 用手机随便输一串密码 触发程序在这里插入图片描述
成功断下
16.我们在刚刚静态分析的逻辑那块打上断点
在这里插入图片描述

然后不断同步hex View窗口里面的数据
17.拿到正确的密钥
在这里插入图片描述

大家可以关注公众号 “安卓逆向菜鸟修炼记” 定期更新最新逆向干货 文章涉及到的所有工具软件 都可以在公众号获取

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值