-
-
[原创]看雪 2017 CTF 第六题 EOR base64
-
发表于: 2017-6-13 12:00 4216
-
0x01 提取 apk中的/lib/armeabi-v7a/librf-chen.so,
0x02 IDA反编译,有ptrace和kill(pid,...)反调试机制,将涉及两者的调用指令全部清零,即改为"MOVS R0,R0" nil指令
0x03 更新 apk中的/lib/armeabi-v7a/librf-chen.so,并重新签名
0x04 IDA<adb forward tcp:23946 tcp:23946>虚拟机,调试
0x05 提取"异或EOR和base64加密"的内部比对注册码xb_rkey
前期混淆清除分析可以发现最终比对位置为 .text 000038D0 ,调试断下可知
librf_chen.so:A46D58D0 LDRB R2, [R1,R4]
librf_chen.so:A46D58D2 LDRB R3, [R0,R4]
librf_chen.so:A46D58D4 CMP R3, R2
R0:异或EOR和BASE64加密的内部xb_rkey
A46F2020 4A 50 79 6A 75 70 33 65 43 79 4A 6A 6C 6B 56 36 JPyjup3eCyJjlkV6
A46F2030 44 6D 53 6D 47 48 51 3D 21 21 0A 0A 00 00 00 00 DmSmGHQ=!!......
R1:异或EOR和BASE64加密的输入xb_ikey
B4B58DE0 65 4B 2F 30 36 38 71 52 57 57 67 7A 78 52 38 78 eK/068qRWWgzxR8x
B4B58DF0 42 47 53 6D 48 48 74 73 4A 4D 30 3D 00 00 00 00 BGSmHHtsJM0=....
0x06 逆向获取异或操作因子 xorvector
因为:xb_ikey = base64.b64encode(ikey ^ xorvector)
所以:xorvector = base64.b64decode(xb_ikey) ^ ikey
base64.b64decode(xb_ikey)可以从[0x05]处通过xb_ikey解码得到,也可以在base64编码前得到
[0x06.0x01]check函数在 text:00005AFC 开始执行base64编码,调试断下
R0: base64.b64decode(xb_ikey)
A48E6460 78 AF F4 EB CA 91 59 68 33 C5 1F 31 04 64 A6 1C
A48E6470 7B 6C 24 CD 00 00 00 00 00 00 00 00 00 00 00 00
在IDAPpython执行下述代码可以得到注册码rkey=madebyericky94528,#0xA48E6460对应于断点处R0值
import base64
b = base64.b64decode('JPyjup3eCyJjlkV6DmSmGHQ=!!'
#b = '$\xfc\xa3\xba\x9d\xde\x0b"c\x96Ez\x0ed\xa6\x18t'
ikey = '12345678901234567890'
xorvector = []
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创] KCTF 2022 Win. 第六题 约束与伪随机 6745
- [原创] KCTF 2021 Win. 第二题 排排坐 21175
- [原创] KCTF 2021 Win. 第一题 算力与攻击模式 4118
- 鸿蒙通识 26031
- [原创] KCTF 2021 Spr. 第二题 未选择的路 9249