600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 逆向 - 用IDA破解adb时间限制

逆向 - 用IDA破解adb时间限制

时间:2023-02-17 19:17:58

相关推荐

逆向 - 用IDA破解adb时间限制

欢迎关注微信公众号:FSA全栈行动 👋

一、场景

项目需要的 adb 工具过期,虽然可以通过修改电脑时间来使用,但这很不方便,于是便有了此文章。

二、实战

此次所需工具/条件如下:

神器 IDA厂商 adb 包懂一点 adb 命令懂一点汇编知识

1、准备环境

【神器 IDA】,这个网上随便找一下就有了,这里不多赘述,有能力的请支持一下正版,良心软件。

【厂商 adb 包】是一个 zip 压缩包,解压后,只有 3 个文件:

adb.exeAdbWinApi.dllAdbWinUsbApi.dll

在 windows 上,为了方便在 cmd 窗口使用 adb 命令,同时为了不与 AndroidStudio 自带的 adb 冲突,我将以上 3 个文件复制到xxx\Android\Sdk\platform-tools目录下进行覆盖。

注意:记得备份好该目录下原本的 3 个文件哦

2、寻找切入点

确定好 TV 盒子的 ip 地址,打开 cmd 窗口,使用adb connect xxx连接盒子:

C:\Users\GitLqr>adb connect 192.168.0.104############

这里的############是厂商 adb 在验证系统时间过期后输出的,当然,此时是无法成功连上 TV 盒子的。不过呢,这个字符串输出不就是一个很好的切入点吗!!接着我们用 IDA-32bit 打开adb.exe

注意:使用 IDA 64bit 还是 32bit 是根据具体要逆向的程序而定的,这里的adb.exe是 32 位程序,所以用的是 IDA-32bit。

选中adb.exe文件后,点 “打开” ,之后一路点 “OK” 和 “Yes”:

注意:IDA 在加载文件的时候,中途可能会提示一些 Warning 警告,不管它,继续点 “OK” 或 “Yes”。

当 IDA 加载成功后,就会看到如下界面了:

现在需要找到前面提到的############字符串,通过 “View -> Open subviews ->Strings” 或 按"Shift+F12" 打开字符串窗口:

此时,在 IDA 的左侧会出现一个 Strings window (字符串窗口):

通过快捷键 “ctrl + f” 打开搜索栏,输入############后回车:

双击该搜索结果条目,在 IDA 右侧的 IDA View-A 窗口会跳转到该字符串所在的地址处。至此,切入点的指令位置就已经找到了。

3、理清逻辑

在找到切入点之后,接下来就需要理清这段指令的触发时机了。注意看,在004C58E9地址处指令后面有一段蓝色字:; DATA XREF: _adb_commandline+124B,这段蓝色字的意思是该指令被_adb_commandline+124B处引用,正合我意,我们的目的就是要看,这个指令是在哪里被引用和触发的。

双击蓝色字之后,IDA View-A 窗口内容会发现变化,从 Text View 转变成了 Graph View,记住这个指令块的地址loc_40C110

按下 ctrl 键,加鼠标滚轮,可以缩放这个 Graph View:

沿着loc_40C110指令块头上的绿色线条,可以找到解决该指令块的唯一源头:

从这个图可以知道,该loc_40BC0B指令块使用了cmp汇编指令,比较 2 个值的大小关系,汇编指令jg的意思是有符号大于则跳转,所以当比较结果大于 0 时,就会跳转到loc_40C110处,即输出############字符串,否则,往右边红色线继续执行,进入正常的 adb 操作。至此,已经把切入点的触发逻辑搞清楚了。

3、逆向汇编代码

在弄清楚触发逻辑之后,就得考虑破解方案了,我自个想到的有如下几种破解思路:

修改获取到的时间值(难,要找到获取时间的地址处)修改比较结果(难,我不知道 ebp、buf、1Fh 都是些啥)修改比较逻辑(易,只需要把jg改成能执行到红色线的其它指令即可)

综上,选用方案 3,因为JG意为有符号大于则跳转,那么相反的,使用为 0 则跳转JZ有符号小于则跳转JL,都可以达到执行红色线的目的,这里我选用JZ指令,这样,无论电脑时间如何修改,基本上都不可能触发。(但是,如果你硬是要抬杠,那就算你说的对)

汇编跳转指令说明:/wq57885/article/details/80700032

接下来要真正开始修改指令码了,先把 Graph View 转成 Text View,右击指令块,点击 “Text view”:

将光标移动到jg指令那行,即0040BC12

注意:鼠标左击一下,确定你光标就是在那里。

通过 “Edit -> Patch program -> Assemble” 打开 Assemble instruction (汇编指令) 对话框:

直接把jg改成jz,然后,点击 “OK”:

此时,你会发现,0040BC12处的指令成功修改成功了,但还是会有个对话框出来问你,下一行0x40BC18处你要不要也改了,因为不需要修改,所以点击 “Cancel” 或 直接叉掉就行了:

搞定,至此,汇编指令修改成功。

4、导出成品

不要以为直接ctrl + s保存就可以了,到目前为止,我们在 IDA 里所做的一切,都没有修改到原adb.exe文件,因为这是一个由 IDA 对原程序加载解析后得到的一个 IDA 工程,我们修改的也只是这个 IDA 工程里的代码,所以,我们还需要把工程进行导出,不过,IDA 很 dio,通过 “Edit -> Patch program -> Apply patches to input file…”,可以把修改过的汇编码直接应用到原文件上:

这里还可以指定应用的地址范围,不用管,直接点 “OK” 即可:

可能会遇到 “Permission denied” 警告,这是因为 adb 进程正在运行中,只需要把 adb 进程 kill 掉,再重复上述操作即可:

注意:除了用 windows 自带的任务管理器,还可以使用 adb 命令adb kill-server来杀掉 adb 进程哦。

应用成功后,再来执行一次 adb 连接命令:

C:\Users\GitLqr>adb kill-serverC:\Users\GitLqr>adb connect 192.168.0.104* daemon not running. starting it now on port 5037 ** daemon started successfully *connected to 192.168.0.104:5555

perfect~

如果文章对您有所帮助, 请不吝点击关注一下我的微信公众号:FSA全栈行动, 这将是对我最大的激励. 公众号不仅有Android技术, 还有iOS, Python等文章, 可能有你想要了解的技能知识点哦~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。