题目下载:731K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3c8W2N6r3q4A6L8q4)9J5c8X3c8S2M7X3#2S2L8#2)9J5c8U0V1^5y4K6x3J5x3o6l9`. 题目打开是这样的,有个序列号,然后根据这个序列号生成一个注册码,然后输入即可解锁。
首先我们,这个序列号是不停更新的,所以我们需要先反编译,将其变化的周期改长一些:
点击提交按钮的代码逻辑是这样的: 调用了encryption01.MyEncryption()函数,用输入的注册码和这个函数的返回值相比较,一般的思路就是开始看着搞函数的加密算法,但是我们看看smali代码: 这里将encryption01.MyEncryption()的返回值放到了v1寄存器里,这个时候可以添加一个toast,将注册码弹出来: 重新打包,触发onClick函数,这时就会将正确的注册码弹出来了。
******************************************************************************************
第二题:
题目下载:ae0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3c8W2N6r3q4A6L8q4)9J5c8X3c8S2M7X3#2S2L8#2)9J5c8U0V1^5y4K6x3J5x3o6l9`. 安装后打开是这样的: 输入用户名和密码登陆
扔进jeb里看看: 加壳了,看看是如何动态加载的: **依次调用了readDexFileFromApk()–>splitPayLoadFromDex() 第一个函数先将apk解压,将里边的dex文件读入到一个byte[]里,重点在splitPayLoadFromDex()函数:**
通过以上分析,我们可以得到加壳了以后的apk的结构应该是: +——-+———–|——————+ + 壳子 | 原始apk | 原始apk的长度 | + ——+———–+——————+
我们需要做的就是将原始apk读取出来,然后解密,看看解密算法:
**直接和0xff或一下即可 Java代码如下:**
**将这个读取出来的新apk拖到jeb里: onClick函数:** 这里调用了checkNameAndPassword这个函数,其中第一个参数是:用户名,第二个是密码,还有另外一个参数,我们看看这个函数: **首先对用户名做了使用sha-1进行了哈希,然后读取前16个字节 进行判断的部分:密码要等于这前十六个字节,同时用户名等于其传进去的第三个参数,第三个参数是什么呢?**
U2hlMTFfTjZSYw== 这个字符串的解码
总结:用户名:base64.decode(“U2hlMTFfTjZSYw==”); 密码:sha1(“用户名”).subString(0,16); 用户名:She11_N6Rc 密码:6acbbca78fdca0c5
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
wyfe 学习,很详细
隔壁雷哥 最近正在学习安卓,明天看看
darmao 这些老哥支持
楼主第一题我按照你这个做法写了~~~~ 也弹出来了那串数字,,可是还是出现了 what a pity!
为什么呢?我去看了安全客上人家写的wp ,,也没看懂。。是只有唯一个正确的解吗?
下面是截图,第一个是安全客上的wp
pipig 楼主第一题我按照你这个做法写了~~~~ 也弹出来了那串数字,,可是还是出现了 what a pity!为什么呢?我去看了安全客上人家写的wp ,,也没看懂。。是只有唯一个正确的解 ...