查壳
分析
- 程序主要代码:
- 程序的流程主要是将输入的数据进行base64解码,然后循环异或0x25,最后与正确结果对比。
- 这道题的难点主要就是分析base64decode和辨别junk code。首先还是进入base64decode去看看:
-
这部分主要是验证输入的合法性,然后准备开始解密base64的字母表(通过观察byte_12A4E40可知)。这也正是用算法分析器分析不出来是base64编码的原因。
-
而这里包括解密字母表和对输入的数据进行base64解密。通过观察他苏按发结构的特征,有 >>,出现分组为4,= 的判断,字母表,很大可能上就是base64解码了。
if ( a1 ) { if ( a1 >= 0x10 ) { __asm { movdqa xmm1, ds:xmmword_12A4F20 } v6 = a1 - (a1 & 0xF); _EAX = &result; do { __asm { movdqu xmm0, xmmword ptr [eax] } v4 += 16; _EAX += 16; __asm { pxor xmm0, xmm1 movdqu xmmword ptr [eax-10h], xmm0 } } while ( v4 < v6 ); }
-
通过动态调试可知,这段代码对数据和结果都不产生任何影响,所以是垃圾代码,无视它即可。
脚本
key='you_know_how_to_remove_junk_code'
raw=''
for i in key:
raw+=chr(ord(i)^0x25)
print raw.encode('base64')