CTF逆向 re1-e7e4ad1a.apk

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

下面要进行ida动态调试:

首先启动android_server,命令:

adb devices

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

adb shell

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

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

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

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

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

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

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

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

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

Flag就是:SSCTF{oty3eaP$g986iwhw32j%OJ)g0o7J.CG:}
### CTF摩尔斯电码解题方法及工具 在CTF竞赛中,摩尔斯电码是一种常见的密码学题目类型。以下内容将详细介绍如何解密摩尔斯电码并提交FLAG。 #### 1. 摩尔斯电码基础 摩尔斯电码由点(·)和划(-)组成,用于传递信息的编码系统。每个字母、数字和标点符号都有对应的摩尔斯电码表示形式[^1]。例如,字母A的摩尔斯电码为`.-`,数字1为`.----`。字母之间通过短停顿分隔,单词之间用较长停顿分隔。 #### 2. 解码工具 解码摩尔斯电码可以使用多种工具和方法。以下是常用的工具: - **在线解码器**:许多网站提供摩尔斯电码的在线解码功能。用户只需输入摩尔斯电码字符串,即可获得解码后的明文。 - **Python脚本**:编写自定义脚本实现摩尔斯电码的解码。以下是一个简单的Python示例代码: ```python morse_code_dict = { '.-': 'A', '-...': 'B', '-.-.': 'C', '-..': 'D', '.': 'E', '..-.': 'F', '--.': 'G', '....': 'H', '..': 'I', '.---': 'J', '-.-': 'K', '.-..': 'L', '--': 'M', '-.': 'N', '---': 'O', '.--.': 'P', '--.-': 'Q', '.-.': 'R', '...': 'S', '-': 'T', '..-': 'U', '...-': 'V', '.--': 'W', '-..-': 'X', '-.--': 'Y', '--..': 'Z', '-----': '0', '.----': '1', '..---': '2', '...--': '3', '....-': '4', '.....': '5', '-....': '6', '--...': '7', '---..': '8', '----.': '9' } def decode_morse(morse_code): morse_code = morse_code.strip().split(' ') decoded_message = ''.join([morse_code_dict[char] if char in morse_code_dict else '' for char in morse_code]) return decoded_message # 示例输入 morse_code = ".... . .-.. .--. ... ---" decoded_message = decode_morse(morse_code) print(decoded_message) # 输出: HELPSO ``` #### 3. 音频隐写分析 在某些CTF题目中,摩尔斯电码可能隐藏在音频文件中。此时需要借助音频处理工具进行分析[^2]。常用工具包括: - **Audacity**:开源音频处理软件,支持分析音频的频谱和波形。 - **MP3Stego**:专门用于音频数据分析和隐写检测的工具。 #### 4. 提交FLAG 解码完成后,通常需要将结果以特定格式提交至CTF平台。大多数情况下,FLAG格式为`flag{}`或`ctf{}`,具体格式需根据题目要求确定。 #### 5. 实战靶场推荐 为了提升解题能力,可以尝试以下CTF实战靶场[^3]: - **CTFTime**:全球CTF比赛信息汇总平台。 - **HackTheBox**:提供真实环境下的渗透测试练习。 - **OverTheWire**:专注于各种类型的CTF挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值