Hgame Final 2026
juncrypt
汇编,好看爱看
main有一段诡异的逻辑
1 | v4 = sub_12B0(s_1, _r_n); |
在sub_12B0函数的最后有
1 | munmap(addr_1, 0x2DAu); |
v4 < 0恒成立,Wrong = 'Correct'不可能执行
所以真正的校验没有在pseudocode里体现
sub_12B0调用sub_1260完成了对shellcode的加载,存入mmap申请的内存
只要获得shellcode,就能恢复校验逻辑
因为地址的动态性,只能下断点在转移控制流的位置dump shellcode
看一下mprotect附近的汇编
1 | .text:0000000000001394 push rax |
断在loc_13A2即可
1 | set disable-randomization on |
dump下shellcode.bin,拖进ida恢复函数
是一个自定义加密逻辑,解密逻辑为
1 | ROL1( ROL1(v, s1) ^ flag_char ^ c, s2 ) == t |
1 | def ror1(val, shift): |
ez_drv
VM + AES + XOR
ida分析 vuln.sys
VM解释器:sub_14000219C,字节码:qword_140004230
AES加密:sub_140001210,S-box:RijnDael_AES_LONG_140004300
AES密文:xmmword_140004210 、xmmword_140004220
逆字节码发现在AES后还有一个XOR处理,XOR key:byte_140004410
1 | from Crypto.Cipher import AES |