Android简单逆向题分析

前言

Android逆向,介绍三个工具:

1.JEB,2.Androidkiller,3.安卓模拟器。

之前逆向所使用的IDA工具,基本可以解决大多数跨平台类型的逆向题目。但是,对于Android的逆向题目,我们有更合适的工具。

注:JEB 和 Androidkiller 由java环境编写,使用者请提前安装好jre1.9以下的环境。

2018/8/7 9:16

JEB:

下载好之后,进入jeb的bin目录:

里面由jeb2-sp-win32-v2.zip(32位java环境)和jeb2-sp-win64-v2.zip(64位Java环境)

使用时,根据java环境的位数解压不同的zip包,覆盖当前目录即可。

JEB能够翻译非常准确的语句,不支持修改程序、重新编译、签名

JEB界面如下:

我们打开本次的Android逆向题目:

双击Bytecode(dex)(因为我们要反汇编做逆向)

然后出现各种包、类:

这是安卓的语言(好像是smil)

我们跳入MainActivity类中,对正文处右击可decompile为java语言:

我们要分析的,就是正文内容。

步骤:因为是在做题,所以我们可以先跳过大量的类、方法的定义,直接找调用类和方法的程序,来寻找校验输入的程序。

我们在main中找到如下代码:

调用check2函数,与我们的输入文本作为参数进行校验。

双击check2,可跳转到定义函数check2的地方。

如下图:

这两个图为check2函数相关代码。

首先我们知道,check2函数的参数,就是我们的输入,在此被命名为arg15。

此处执行校验的代码段:

while(v4

if((v7[v4] & 255)!= ((arg15.charAt(v4) ^ v5.charAt(v4 % v5.length())) & 255)) {

throw newRuntimeException();

}

++v4;

}

v4之前被赋值为0,在这里作为了步长变量(v4的意义)。

回溯代码可知,arg15要求长度:16(我们的输入为16位)

“v7[v4] & 255”:

此处进行“位与”运算,v7数组的值,和8个1(255就是1111 1111)位与,实际上就是v7自己的值。

“arg15.charAt(v4) ^ v5.charAt(v4 % v5.length()”:

v5:我们可以找到,v5就是getKey()的返回值字符串:“goodluck”,8个字节。

v4作为步长对8取余.v4从0到15共16次,上述代码将“goodluck”字符串单个字符循环取两遍。

恭喜你,看到这里,已经对该题目有所了解了。

一句话:将自己的16位输入,和 “goodluck” 做异或 ,最终要等于 v7 数组的值。

我们根据v7数组和“goodluck”,写一个python脚本进行解密。

注意:有的小伙伴不知道异或怎么算。我给出公式:a ^ b = c => b = a ^ c

很类似乘法交换律。

脚本如下:

运行:

这道逆向题的passcode就出来了。

接下来,只需要在题目中输入passcode获取flag即可。此处就不作演示了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180807G0HA2U00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券