CTF逆向 re1-e7e4ad1a.apk

在这里分析一下2016ctf的一道逆向题,apk包:re1-e7e4ad1a.apk。

首先使用adb将apk文件发送到真机模拟器中(模拟器根据自己,也可以使用电脑上的模拟器,这里我使用的是真机模拟器)。界面如下:

CTF逆向 re1-e7e4ad1a.apk_第1张图片

从这个APP的界面可以看到需要输入编号和密码,然后单击sign。在这里我们要做的就是寻找到这个编号和密码。

使用jeb打开re1-e7e4ad1a.apk文件,看一下整体的结构不是很乱

CTF逆向 re1-e7e4ad1a.apk_第2张图片

在这里看到了onCreate,光标移到此处,点击q键查看C代码,

CTF逆向 re1-e7e4ad1a.apk_第3张图片

在这里发现两个按钮,分别是sign和exit。点开b可以看到一个非常关键的判断语句:

可以看到前半句是来判断编号的,后半句是来判断密码的。那么就先看看前半句:

(Seclreg.c(this.a).equals(this.a.getResources().getString(2131034119)))

可以看到getString的值为2131034119,将其转换为十六进制为7f050007,然后在public.xml中找到7f050007,可以看到username,然后在string.xml中找到username,这样我们就找到了编号。

 

CTF逆向 re1-e7e4ad1a.apk_第4张图片

CTF逆向 re1-e7e4ad1a.apk_第5张图片

找到了编号就继续分析后半句:

(Seclreg.f(this.a).getpl(Seclreg.e(this.a), Seclreg.d(this.a))))

这里可以看到getpl,找到它发现了native,

看到这里就应该知道这里需要分析so文件

将在jeb里看到的so文件拖到ida进行静态分析:

在窗口exports可以看到我们想要找的getpl,双击进去,转换成C代码发现了关键函数getpl

双击进去查看。因为我们的目的是找到最终的flag,所以不需要每条代码都进行分析,只要找到关键的语句就可以,一般情况都会在最后,果然在最后面可以看到:

CTF逆向 re1-e7e4ad1a.apk_第6张图片

这就是关键的判断语句。首先可以看到if ( v11 == 39 )语句,很明显就是告诉我们密码的长度是39位,这里需要修改判断语句将其改为相反的结果。往下看可以看到一个比较函数,将p1和s2进行比较,s2是我们需要输入的密码,那么p1就是我们需要找到的flag了。

回到汇编图形窗口,找到这个关键代码:

CTF逆向 re1-e7e4ad1a.apk_第7张图片

在00007FEE处找到了关键代码,BNE代表的是不为0 跳转,与之相对应的是BEQ,两个相对应的机器码分别是D1和D0,

下面要进行ida动态调试:

首先启动android_server,命令:

adb devices

adb push  android_server的目录  /data/local/tmp/android_server

adb shell

CTF逆向 re1-e7e4ad1a.apk_第8张图片

我在操作的时候遇到了一些错误,大家自己操作时多多注意就好了。

然后重新打开一个cmd进行端口转发:adb forward tcp:23946 tcp:23946

在真机模拟器中打开APP,将要调试的so文件载入ida选择Debugger---Remote ARMLinux/Android debugger 单击OK即可。

CTF逆向 re1-e7e4ad1a.apk_第9张图片

Debugger-->Attach to process找到com.ssctf.seclreg,点击OK即可。

CTF逆向 re1-e7e4ad1a.apk_第10张图片

下面需要确定断点的位置,偏移地址是7CEC,要需要找到基地址就可以了edit---segments---rebase program即可找到基地址EEE1F000。所以需要下断点的位置就是EEE1F000+7CEC =EEE26CEC ,快捷键G跳转转EEE26CEC ,下断点,然后运行:

CTF逆向 re1-e7e4ad1a.apk_第11张图片

然后需要在真机模拟器中填写正确的编号,随便写一个密码,点击sign,程序就会运行到这里,然后我们要找到前面分析过的重要的一个跳转:

CTF逆向 re1-e7e4ad1a.apk_第12张图片

找到后点击View--Open subviews--Hex dump,利用F2将D0改为D1,保存即可。

CTF逆向 re1-e7e4ad1a.apk_第13张图片

下断点,点击运行进行调试:

CTF逆向 re1-e7e4ad1a.apk_第14张图片

在hex view中右键点击Synchronize with选择R0,然后单步调试就可以看到flag了。也看到了前面分析过的P1。

CTF逆向 re1-e7e4ad1a.apk_第15张图片

Flag就是:SSCTF{oty3eaP$g986iwhw32j%OJ)g0o7J.CG:}

你可能感兴趣的:(CTF逆向 re1-e7e4ad1a.apk)