安卓逆向学习笔记之分析AliCrackme_1

举报
悦来客栈的老板 发表于 2020/12/29 01:30:47 2020/12/29
【摘要】 一个2015年初级练手 Crackme,因此很简单,但是很有趣,因此记录一下。样本链接地址: https://pan.baidu.com/s/1PD_5K_gkT0FzBU8UhZb5bg 提取码: ea25 安装软件并打开,随便输入一个字符串,点击登陆: 将 apk拖入到 jadx,并搜索上面的字符: 发现啥也没有,既然是 Crakeme,那我们就先...

一个2015年初级练手 Crackme,因此很简单,但是很有趣,因此记录一下。样本链接地址:

https://pan.baidu.com/s/1PD_5K_gkT0FzBU8UhZb5bg 提取码: ea25

  

安装软件并打开,随便输入一个字符串,点击登陆:

将 apk拖入到 jadx,并搜索上面的字符:

发现啥也没有,既然是 Crakeme,那我们就先看看它的 MainActivity 吧:

我们的目的是要验证OK,即经过处理后的 输入的字符串 与 这个 pw相等才行:

这段代码的意思很清晰,一个table,一个pw,处理输入的字符串函数有传递 table进去,说明肯定与之有关,我们分别来看看 table和pw是啥吧:

原来与这个logo.png有关:读入图片,然后复制图片的部分内容,并经过UTF-8解码,分别保存到table和pw。

System.arraycopy由搜索引擎得知参数定义如下:


   
  1. public static void arraycopy(Object src,
  2. int srcPos,
  3. Object dest,
  4. int destPos,
  5.                              int length)

 src表示源数组,srcPos表示源数组要复制的起始位置,desc表示目标数组,destPos表示目标数组要复制的起始位置,length表示要复制的长度。

虽然

虽然暂时不知道table和pw是啥,但是可以猜出来,768 / 256 = 3,一个utf-8编码后的汉字刚好占三个字节,也就是256个汉字,打开assets目录,确实有个png文件。

根据JAVA的代码,用Python写个程序看看复制的到底是啥内容:


   
  1. with open("logo.png",'rb') as fp:
  2. data = fp.read()
  3. table = data[89473:89473+768].decode("utf-8")
  4. print (table)

果然是一些汉字,那 pw也看看是啥吧:

是这么个字符串。根据代码逻辑,输入的字符串经过处理后与pw("义弓么丸广之")相比较,如果相等则弹出成功的对话框,否则验证失败,因此我们来看看 这个处理函数吧:

很简单的一个处理函数,就是对输入的字符串先转为byte类型,然后依次作为索引取table数组里面的值,再返回一个字串。这个返回的字串如果与pw相等则验证成功。有了这个逻辑,再写出逆向索引的代码很容易:


   
  1. with open("logo.png",'rb') as fp:
  2.     data = fp.read()
  3.     
  4. table = data[89473:89473+768].decode("utf-8")
  5. pw = data[91265:91265+18].decode("utf-8")
  6. pwd = ''.join([chr(table.index(ch)) for ch in pw])
  7. print (pwd)

结果是:581026,输入这个字符串试试:

弹出了破解成功的对话框,至此,破解该Crakeme成功。

当然,获取table和pw也可以用frida来Hook,我感觉有点大材小用吧,另外别人写过的东西,我再去写就有点不好了。

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/109508029

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。