【愚公系列】2023年08月 攻防世界-MOBILE(APK逆向)

举报
愚公搬代码 发表于 2023/08/18 22:50:39 2023/08/18
【摘要】 @TOC 前言下面介绍两个反编译工具jadx是一个用于反编译Android APK文件的开源工具,静态反编译,查找索引功能强大jeb和IDA很像,属于动态调试,可以看java汇编也可以生成伪代码,还可以动态attach到目标调试对于so文件的逆向工具选择IDA逆向工具是一款反汇编器,被广泛应用于软件逆向工程领域,能够反汇编各种不同平台的二进制程序代码,并还原成可读的汇编代码。 一、APK逆向...

@TOC


前言

下面介绍两个反编译工具

  • jadx是一个用于反编译Android APK文件的开源工具,静态反编译,查找索引功能强大
  • jeb和IDA很像,属于动态调试,可以看java汇编也可以生成伪代码,还可以动态attach到目标调试

对于so文件的逆向工具选择

  • IDA逆向工具是一款反汇编器,被广泛应用于软件逆向工程领域,能够反汇编各种不同平台的二进制程序代码,并还原成可读的汇编代码。

一、APK逆向

1.题目

在这里插入图片描述

2.答题

1、将apk拖进jadx工具反编译,可以看到两个关键参数

edit_userName=Tenshine
edit_sn = 0x7f0c0051;

在这里插入图片描述
进入checkSN
在这里插入图片描述

public boolean checkSN(String userName, String sn) {
    if (userName == null) {
        return false;
    }
    try {
        if (userName.length() == 0 || sn == null || sn.length() != 22) {
            return false;
        }
        MessageDigest digest = MessageDigest.getInstance("MD5");
        digest.reset();
        digest.update(userName.getBytes());
        String hexstr = toHexString(digest.digest(), "");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < hexstr.length(); i += 2) {
            sb.append(hexstr.charAt(i));
        }
        if (("flag{" + sb.toString() + "}").equalsIgnoreCase(sn)) {
            return true;
        }
        return false;
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return false;
    }
}

进行md5加密,转成hex字符串,加上flag头后与输入密码进行比较

2、静态脚本获取

#coding:utf8
import hashlib
 
str1=b"Tenshine"
str2=hashlib.md5(str1).hexdigest()
print(str2)#b9c77224ff234f27ac6badf83b855c76
flag=""
for i in range(len(str2)):
    if(i%2==0):
        flag+=str2[i]
#flag="flag{"+flag+"}"
print(flag) #bc72f242a6af3857

3、动态获取结果

taskkill /f /im adb.exe   # 先把模拟器自带的adb.exe杀死、去除环境变量

adb devices   # 查看连接的设备,看是否连接成功

#查看运行的app包名,包含Activity
adb shell dumpsys window | findstr mCurrentFocus  

# 以调试方式运行apk,包名: com.example.crackme/com.example.crackme.MainActivity
adb shell am start -D -n  com.example.crackme/com.example.crackme.MainActivity

如果连接雷电模拟器失败,尝试进入雷电文件夹找到adb.exe的目录打开cmd运行

"./adb" connect 127.0.0.1:5555
# 指定设备去操作
adb -s emulator-5554 logcat 

adb以调试方式打开应用,会出现这界面,说明成功,出现上面页面就可以在JEB3里面进入app的调试
在这里插入图片描述

断点
在这里插入图片描述

得到加密后的字符为string@4705:“bc72f242a6af3857”

则flag为bc72f242a6af3857

备注:JEB的常用快捷键:

  • Q:跳转到对应代码
  • ctrl+B:打断点
  • Tab:进入或退出伪代码
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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