-
-
[原创]第四题 密界寻踪
-
2018-6-22 21:59 2236
-
一个Windows32位程序逆向。
IDA简单分析一下,得知输入长度小于等于0x17,并且前三位是数字。
整体的流程分两步,先是0x402630,对第4位到最后的输入验证,然后是0x402D60,验证前三位。
strings之后发现有大数库miracl,标一标发现是把输入和一些常数做powmod,再经过一些处理做strcmp,那么实际上就是RSA。动态调试拿到几个参数,发现N可以分解,直接解出后20位为iamahandsomeguyhaha1
。看来输入长度恰好是0x17。
一些操作流程:
>>> n = 0x7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585 >>> y = 1001 >>> hex(pow(0x31, 1001, n)) '0x341faae70a3ee3e43834da01347f38c0a14b738a0175fb5e9488023ddd5f6f69L' >>> n 56828191929550499896142468009756520490526164668720784286547535509684830643589L >>> p = 208096057845685678782766058500526476379, q= 273086345401562743300402731618892888991 File "<stdin>", line 1 SyntaxError: can't assign to literal >>> p = 208096057845685678782766058500526476379; q= 273086345401562743300402731618892888991; >>> p 208096057845685678782766058500526476379L >>> q 273086345401562743300402731618892888991L >>> d = 2e70a649e6a648f78a9d2c1074a7d51f0099c13f7f9bcbb78bad2c1b1b1d96f1 File "<stdin>", line 1 d = 2e70a649e6a648f78a9d2c1074a7d51f0099c13f7f9bcbb78bad2c1b1b1d96f1 ^ SyntaxError: invalid syntax >>> d = 0x2e70a649e6a648f78a9d2c1074a7d51f0099c13f7f9bcbb78bad2c1b1b1d96f1 >>> z = 0x208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304 >>> pow(z,d,n) 601616731606062377067631775469716020478784069937L >>> hex(pow(z,d,n) ... ) '0x69616d6168616e64736f6d656775796861686131L' >>> from pwn import * >>> unhex('69616d6168616e64736f6d656775796861686131') 'iamahandsomeguyhaha1'
前三位的验证通过搜常数就可以发现是一个AES,搜了一会儿没搜到类似的源代码,想想还是直接爆破算了,毕竟只有1000种可能。
for /L %%a in (0,1,9) do @for /L %%b in (0,1,9) do @for /L %%c in (0,1,9) do @echo %%a%%b%%ciamahandsomeguyhaha1 | .\cm4bak.exe
输出重定向到result.txt
中,搜到success在1045行,故前三位为是(1045-5)/2=520
。
最后结果为520iamahandsomeguyhaha1
。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-6-22 23:04
被diycode编辑
,原因:
赞赏
他的文章
谁下载
无
看原图