-
-
[原创]看雪京东2018CTF第四题密界寻踪
-
2018-6-23 11:31 3165
-
这个题使用了把sn分成了前面的3字符和后面的字符两部分进行验证。主体程序流程如下
sub_40125D使用了miracl库进行了RSA的验证。miracl库函数的识别如下:
加密与解密这本书里有过相应的介绍。
sub_40125D跳转到sub_402630的流程如下:
需要注意的是要nop掉几个代码,这个几个代码是作者故意扰乱IDA的流程图分析,这样的代码有总共有三处。除了这个还有sub_402580,sub_402D60这两个函数
sub_402630 这个函数进行了RSA的验证,对sn[3]的字符进行加密结果要等于v80,这里面的数值可以通过OD来观察
n=0x7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585
e=0x3e9
这里通过http://www.factordb.com这个网站对n进行分解,分解结果如下:
p=208096057845685678782766058500526476379
q=273086345401562743300402731618892888991
所以解得d=0x2E70A649E6A648F78A9D2C1074A7D51F0099C13F7F9BCBB78BAD2C1B1B1D96F1,然后对v80=0x208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304进行解密得到69616d6168616e64736f6d656775796861686131
转换到字符为iamahandsomeguyhaha1。
接下来是sub_40128F这个函数对前面三个字符的验证,这个验证用到了AES。因为前面三个字符是数字,所以这里我用python来穷举了,穷举代码如下:
# -*- coding: ascii -*- import subprocess sn3="iamahandsomeguyhaha1" for i in range(100,999): p = subprocess.Popen("CrackMe.exe", stdin = subprocess.PIPE,\ stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True) sn=str(i)+sn3+'\n' outs,errs=p.communicate(bytes(sn.encode("ascii"))) if(b"success" in outs): print(sn) break
穷举结果如下:
sn=520iamahandsomeguyhaha1
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。
赞赏
他的文章
[原创]vmp trace的优化处理
16921
[原创]基于LSTM的二进制代码相似性检测
19741
[原创]混合布尔算术运算的混淆及反混淆
18786
[原创]利用机器学习分析vmp的思路
17365
看原图