记录一次安卓动态调试lib库

这道题是iscc 2017中的安卓第二题,所有的算法都在lib库中,而lib库又是加了壳的,所以就用动态调试解决吧。第一次动态调试安卓,就写的详细一些吧。

文中用到

1.能正常运行这个crackme的手机一部,需要root(本人手上的主力机是安卓7.1的就运行不了)
2.IDA一个
3.IDA神级插件Keypatch
4.安卓调试adb
5.python
6.这个crackme

题目链接

链接:http://pan.baidu.com/s/1kVLYYOJ 密码:e2tj

解析

准备

首先在手机上安装这个crackme,这个不需要多说。

通过jeb的逆向,发现所有与题目解题相关的代码都在libtutu.so中。ida直接载入会发现这个so是被加密的。

那就开始动态调试。

在ida的目录下有一个叫dbgsrv的文件夹

此次我们动态调试所需要的是android_server。

通过各种方法,把它放到/system/bin/目录下,并给予执行权限

然后在电脑上执行adb shell,输入su拿到root权限后再输入andoird_server

看到Listening on port #23946...

再开一个命令行窗口,输入 adb forward tcp:23946 tcp:23946进行端口转发。

至此,准备工作就完成了。

IDA连接调试

在手机端打开待调试的crackme

在x86的ida下,选择如下菜单

点击OK。

找到待调试的应用:

点击OK,等待片刻后进入调试界面。

由于要等待so解密,所以我们打开这一项

勾上这里

点击运行让程序跑起来。

手机端随便输入一些东西后点击确定,发现IDA成功断下。

出现这个直接点OK跳过

直接apply

断在linker

手动按f8从linker走到libart.so(我调试用的手机是安卓5.1的)

在Modules里找到libtutu.so

双击check

发现代码已经解密了。

可以按F5看看

一切正常。

方法一:静态分析

这些明显是函数指针,我们双击过去,按c转换成代码,再回来按f5。

上面有个未知作用的函数,我们一层层点进去看,发现是strlen。

稍微重命名一下,我们可以看出就是一个AES_ECB模式的加密

IV和enc都有了,直接用python解密一下就出来了。

123456789
from Crypto.Cipher import AESiv = '122B157F2BAED2A6ACF7158807CF4F3C'.decode('hex')enc = '47FE6CEEA092F9A72A73B3763613701A'.decode('hex')

cryptor = AES.new(iv,AES.MODE_ECB)dec = cryptor.decrypt(enc)

print dec

flag:6ae379eaf3ccada5

方法二:纯动态调试

既然都已经开始动态调试了,为什么还要劳烦我们去分析代码呢?总有人会这样想。

也算是锻炼一下动态的能力,我们现在用纯动态的方法来做。

首先,如果你脱完壳直接f9开跑的话,你会发现程序结束了,因为这个so里有一个叫做antiDebug的函数

我们不用去管这个函数内部到底干了什么,我们只要直接将这个函数在段首ret掉,这样下面的所有代码都不会被执行了。

我们掏出插件keypatch,ctrl+alt+k

改成POP {R4-R7,PC}

这样这个antiDebug就被patch掉了。

我们还发现这个so中自带了decrypt函数。

我们来到check函数,找到这一段。

我们要把原来的AES128_ECB_encrypt)(input, &IV, &enc_out)改成AES128_ECB_decrypt)(enc_right, &IV, &enc_out),这样enc_out里保存的就是我们所需要的flag了。

这里,我们发现我们需要的enc_right保存在R6寄存器里

所以我们patch这两句

重新f5,现在变成了我们所希望的样子

用f2下好断点,f9运行

enc_out是在R7寄存器里,此时的R7为FFABD2A4

在数据窗口我们按G键,跳转到FFABD2A4

成功得到flag:6ae379eaf3ccada5

总结

作为第一次安卓动态调试,很多地方还做的很生疏,但收获也是很多的。

原文:大专栏  记录一次安卓动态调试lib库

原文地址:https://www.cnblogs.com/sanxiandoupi/p/11643460.html

时间: 2024-10-29 00:49:22

记录一次安卓动态调试lib库的相关文章

安卓动态调试七种武器之长生剑 - Smali Instrumentation

安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中(共7篇)分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 0x01 长生剑 长生剑是把神奇的剑,为白玉京所配,剑名取

[转载]安卓动态调试七种武器之长生剑 - Smali Instrumentation

本文转载自: http://drops.wooyun.org/papers/6045 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentati

安卓动态调试七种武器之离别钩 – Hooking(下)

0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentation 安卓动态调试七种武器之孔雀翎 – Ida Pro 安卓动态调试七种武器之离别钩

安卓动态调试七种武器之孔雀翎 – Ida Pro

安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentation 安卓动

[转载]安卓动态调试七种武器之孔雀翎 - Ida

本文转载自: http://drops.wooyun.org/tips/6840 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentation

安卓动态调试方法

安卓动态调试方法: 然后这样子 然后填一下参数:  然后附加进程 然后找到 对比静态分析 总的来说就是1.把ida 目录下android_server 传到android 目录中如:adb push  android_server /data/local/tmp/adb shell 进入模拟器cd /data/local/tmp/chmod 755 android_server./android_server看到监听端口 23946 2.在windows 控制台下转发window 到模拟器或者手

Android逆向之动态调试so库JNI_Onload函数-----基于IDA实现

之前看过吾爱破解论坛一个关于Android'逆向动态调试的经验总结帖,那个帖子写的很好,对Android的脱壳和破解很有帮助,之前我们老师在上课的时候也讲过集中调试的方法,但是现在不太实用.对吾爱破解论坛的该贴,我也是看了很多遍,自己也查了不少资料,但是自己动手的时候总觉比较繁琐,并且很多细节的地方没有注意到,按照那个帖子尝试了几遍但是却出现了错误(后面会提到),今天周末重新拾起来试了试,终于把遇到的问题给解决了,顺便做个记录以免忘记了,其中的一些细节我也不是太明白,忘知道的人给指出. 第一步.

android在JNI_OnLoad入口函数下断点动态调试so库

一般来说,很多APK的校验代码,都会在程序运行的时候自动加载一些动态so库,然后执行这些库中的校验代码.所以为了能够通过程序的校验,我们必须在执行这些函数之前下断点--理想的方法就是在JNI_OnLoad入口函数下断点. 在2.3.3模拟器中详细步骤如下: ①在控制台输入adb shell 进入手机,然后使用  am start -D -n 包名/类名,以等待调试的模式启动APK应用: 这里需要说明的是 "包名/类名"的书写方法: # am start -n {包(package)名}

安卓APP动态调试-IDA实用攻略

0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖,包括手机QQ.游戏.导航地图.微博.微信.手机支付等等,尤其2015年春节期间各大厂商推出的抢红包活动,一时让移动支付应用变得异常火热. 然后移动安全问题接憧而至,主要分为移动断网络安全和客户端应用安全.目前移动APP软件保护方面还处于初级阶段,许多厂商对APP安全认识不够深入,产品未经过加密处理,使得逆向分析者能够通过逆向分析.动态调试等技术来破解APP,这样APP原本需