前言

本文内容仅用于个人学习、研究或欣赏。通过使用本文内容随之而来的风险与作者无关。请遵守国家法律。

一、工具

  • JEB.android.decompiler
  • 夜神安卓模拟器
  • 测试用apk( 密码:3mt1)
    该APK收集自互联网、来源于阿里,此处仅用于在遵守国家法律法规下的个人学习、研究或欣赏)
  • adb(来自夜神模拟器)

二、配置动态调试环境

Ⅰ、adb工具方面

夜神模拟器自带adb,路径在安装目录下的/Nox/bin,首先将其添加到环境变量
,以确保cmd可以运行adb

在这里插入图片描述
添加完成后,访问/Nox/bin/BignoxVMS/nox,以记事本打开文件./nox.vbox,找到port2字段,记住hostport

在这里插入图片描述
开启夜神模拟器,之后打开cmd执行连接并检测,确保成功连接

adb connect 127.0.0.1:62001
adb devices

Ⅱ、模拟器方面

首先安装测试用apk,这里要求逆向出密码完成登录

在这里插入图片描述

进入设置-关于,多次点击版本号直到进入开发者模式

进入设置-开发者模式,按照下图开启功能:

在这里插入图片描述

三、审计代码、动态调试

Ⅰ、主代码审计

打开JEB.android.decompiler,拖入测试用apk,从程序入口开始审计代码

在这里插入图片描述
按tab键反编译成java代码

下面有个onClick()函数,这就是在点击登录以后发生的事件

在这里插入图片描述
代码审计,推测:

  • v3是输入的文本
  • v5似乎是从图片获取的密码表,从table联想到的
  • v4是从图片获取的正确密码
  • try中:v2是将v3通过v5转换后得到的密码,即使用密码表加密输入的文本
  • if中:条件为假会提示登陆正确,也就是要使得v2=v4,这里是验证密码

思路就很清晰了:

  1. 首先追踪getTableFromPic()获取密码表;
  2. 接着追踪getPwdFromPic()获取正确密码;
  3. 输入已知字符串,追踪bytesToAliSmsCode(),验证加密方式
  4. 最后转换成明文输入即可

Ⅱ、追踪函数运行

追踪getTableFromPic(),审计可知:该函数从一张图片获取密码表,并没有其他随机函数,因此密码表应该是个定值

按tab从java代码切回smali代码,选择该函数第一行,按ctrl+B添加一个断点

在这里插入图片描述
之后模拟器运行APK,如果之前正确设置会有等待提示

在这里插入图片描述

JEB中点击开始,确保IP和端口设置正确,并且进程栏中有进程,确认完成后点击附上

在这里插入图片描述

模拟器随便输入后提交,代码会自动停在断点处,并以深蓝底色作为标识

在这里插入图片描述
点击单步运行或跳过,多次反复运行后观察右侧的变量

在这里插入图片描述

点击Type框,输入string可以改成字符串,否则默认只显示数字,跳转到该函数最后一行,观察变量

在这里插入图片描述
得到了密码表:

一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中冈贝内水见午牛手毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆订计户认心尺引丑巴孔队办以允予劝双书幻玉刊示末未击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐

接着追踪getPwdFromPic(),获取正确密码

在这里插入图片描述

义弓么丸广之

下一步,追踪bytesToAliSmsCode(),调试输入字符串1234

直接跳转到if语句里面就行

在这里插入图片描述

么广亡门

得到1234对应么广亡门,密码表中:么广亡门位于第50-53位,并且是连续的

联想到ASCII,恰好1234的ASCII码是49-52,由于ASCII是从0开始,的很容易发现对应关系了:

  1. 输入的字符串每一位转换成ASCII码值
  2. ACII码对应位数检索密码表
  3. 得到每一个字符的密文

由此,完成解密就很轻松了,以下是解密脚本:
(编码必须声明为gbk等,utf8不支持)

# coding=gbk
table = '一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山' \
        '千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无' \
        '元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中冈贝内水见午牛手毛' \
        '气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火' \
        '为斗忆订计户认心尺引丑巴孔队办以允予劝双书幻玉刊示末未击打巧正扑扒功扔去甘世' \
        '古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄' \
        '叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐'
code = '义弓么丸广之'

for i in code:
    print(chr(table.index(i)), end="")

581026

验证成功

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐