安卓逆向-反调试与绕过反调试之如何当好打工人!

网络安全——安卓逆向-反调试与绕过反调试(一)

1024节日快乐!!

前言

在谈到网络安全时,其中反调试在代码保护中扮演着很重要的角色,虽然不能完全阻止攻击者,但是还是能加大攻击者的时间成本,一般与加壳结合使用。
反调试可以分为两类:一类是检测,另一类是攻击,前者是去想各种办法去检测程序是否在被调试,如果正在被调试的话做出一些“反”的举措,比如退出等等,后者是采用攻击的方法,就是想办法让调试器不能正常工作或者是让调试器崩溃,从而阻止它。

一、实战详解分析-关键文件检测

1、IDA案例思路分析

反调试通俗意思就是,程序挂起后突然出现八个F:FFFFFFFF或者在java层运行程序一直运行不起来等情况!

第一个反调试会检测android_server,文件名检测!来分析下android_server源文件。
请添加图片描述
接下来分析下filecheck,用IDA打开
请添加图片描述
拖入后,IDA反编译
请添加图片描述
这是编译可执行文件,那么和so文件有什么区别呢?

SO文件是可以找到JNI_onload,那么编译可执行文件在IDA如何找逻辑所在处呢?
可看到main函数的入口函数,在Exports搜索start:
在这里插入图片描述
在这里插入图片描述
进来后看到main函数,还有了BL libc_init指令,这时候看看有几个参数?
在这里插入图片描述
如果这个函数的参数超过了四个以上(>4),跳转的地址就得用其他的寄存器来替代,libc_init当它这里没有被代替的时候,往下找最大的寄存器只出现了R3为止,没有出现R4以上的寄存器,那么就可以猜测传入的个数的参数为:0-3就是四个参数!TAB查看伪C代码:
在这里插入图片描述
双击main方法
在这里插入图片描述
这样就是编译可执行程序所要找的main函数

就算在重新打开IDA反编译,还是直接进入main函数处,那么得知道如何进入main函数的地方
开始分析,TAB键打开伪c代码
隐藏类型后:
请添加图片描述
check()检查,执行下面的循环if,判断if需要执行检查check,双击check进入
请添加图片描述
v0 = opendir(“/data/local/tmp”); opendir打开/data/local/tmp目录给V0,这是文件指针

result = getpid(); getpid给result。getpid是当前进程的ID。

v2 = result; result给V2

就是说当V0不为空的时候,要执行while里面的循环逻辑,

V3=readdir(v0); readdir()返回参数dir 目录流的下个目录进入点。返回值:成功则返回下个目录进入点. 有错误发生或读取到目录文件尾则返回NULL.

v4 = v3 == 0; 拿V3和0对比

v5 = (v3 + 19); 计算v3+19

if ( v4 ): 判断V3=readdir(v0);是否为null,为空结束循环

如果/data/local/tmp目录下有android_server就会直接kill结束进程,这就是一个文件反调试逻辑思路。
2、案例思路源码分析
过掉文件检查不难,直接改名字即可!开始分析下面的案例。
请添加图片描述
C语言从这个main函数开始执行,首先对数组的开始一个声明,主要关心check函数。
请添加图片描述
check就是检测android_server文件的!和之前理解的是一样的,定义了一个字符串指针指向目录/data/local/tmp,然后定义一个文件dir操作,用opendir打开tmp目录,打开后获取pid,接下来判断有没有打开,如果打开不为空(!=)就打开成功下面的while条件代码,currentDir有定义了一个指针,当读取的文件指针不为空(null),就继续往下读取。
遍历一个文件时,如果你的指针指向的下一个位不为空,意味着你的指针的后面还有文件。

3、Android底层详解
上传文件名为android_server和filecheck可执行文件(android_server文件在IDA的dbgsrv目录下)

1、adb push C:\test\filecheck data/local/tmp adb push
2、 C:\test\android_server data/local/tmp

请添加图片描述
成功上传到底层,可执行文件

为filecheck赋最高权限

chmod 777 filecheck

请添加图片描述
执行filecheck文件请添加图片描述
我们看到执行失败,报处kliied

为android_server改名测试

请添加图片描述
可以看到改名后,filecheck正常执行!!!

(下一期:实战详解分析-调试端口检测)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值