-
-
[秋季赛]2021安卓平台CrackMe
-
发表于:
2021-11-13 15:26
3788
-
本题目是安卓平台的crackme
算法简单,可玩性高,有兴趣可以随时交流。
规则2的demo为:KCTF2021-android-crackme.apk
其中规则2的两组序列号如下:
第一组序列号:
name:KCTF
serial:3633386636373733353933626439316437383865383931653663663432656661
第二组序列号:
name:4DD6F06301B04D13
serial:6461323135643835663832623133666234313635636637383266613665363961
(通过命令shasum -a 256 crackme.apk计算apk得文件hash:
4dd6f06301b04d13f76c513326be681de153ff743ce17f411a35e09a08a90d37)
设计思路:
1.对输入name字符串通过SHA1算法,计算得到16字节的hash值
2.hash值做rc4加密运算,得到16字节value1值
3.对部分代码计算SHA256得到16字节的密钥Key
4.将输入64个字符password转为16字节的16进制表示(如:前四个字节64613231转换后为0xda21)和Key做3DES解密得到value2,当password不足64字节时提示错误
5.比较value1 == value2时,则为正确的密钥对
保护方法:
1.代码中有效隐藏了系统函数调用,仅保留了一个memset.
2.增加了常规的检测非法运行手段
3.通过自研的保护方案将原so中的原始指令进行替换,转换后一条指令对应多条指令,并且部分指令经过编码生成数据,运行时对数据进行解析运行。原函数内部的字符串和函数访问通过模拟指令执行,能够有效隐藏相关调用。
解题思路:
由于对代码段的指令做了变形保护,通过相同功能的函数实现指令替代运行,所以反编译时,较难看出算法逻辑,需要对模拟代码标识出相应的指令来分析逻辑,当然也存在不需要标记的情况,春季赛中4为选手均是通过对数据流分析,比对每种指令运行次数,以及数据输入及输出做观察跟踪出的序列号。当然也可以通过人肉找到关键比较处跟踪到序列号。
关于作者
喜欢阅读与运动,专注于互联网安全行业从业十多年之久。
主攻方向研究二进制文件保护技术,基于指令虚拟化保护技术,研发的安全产品覆盖诸多平台包括Android,Linux, IOS及物联网平台,致力于通过技术手段,以减少对用户的恶意攻击及破坏行为.让世界多一些友善。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2022-4-11 16:06
被ArmVMP编辑
,原因: