资讯动态

nssctf_e@sy_flower

发布时间:2026/8/29 5:58:00 来源:尧图企业网站定制
老样子下载、查壳、32位、IDA打开看到红色地址.text:004010D0 jz short near ptr loc_4010D41.text:004010D2 jnz short near ptr loc_4010D41明显又是花指令跳转到.text:004010D4 loc_4010D41所以.text:004010D4 loc_4010D4: ; CODE XREF: .text:004010D0↑j大概率就是脏字节 光标放到这一行然后按U右键NOP掉再按C可以看到汇编程序正常了。左侧还是红的说明需要重新分析按P再按f5得到伪码进行代码分析1. 输入读取sub_401020(please input flag\n, v8); sub_401050(%s, (char)Arglist); v3 strlen(Arglist);打印提示语读取用户输入的 flag 字符串存入Arglist数组。计算并获取输入字符串的总长度。v3是用户输入字符串的长度。2. 第一步变换奇偶位两两交换for ( i 0; i v3 / 2; i ) { v5 Arglist[2 * i]; Arglist[2 * i] Arglist[2 * i 1]; Arglist[2 * i 1] v5; }以 2 个字符为一组将每组内前后两个字符交换位置。举例原始字符串abcdef→ 交换后变为badcfe第 0 位与第 1 位交换、第 2 位与第 3 位交换以此类推。特性这是自逆操作对结果再执行一次完全相同的交换就会还原为原始字符串。for ( j 0; j strlen(Arglist); j ) Arglist[j] ^ 0x30u;对字符串中每个字符的 ASCII 码与固定值0x30执行按位异或运算。特性异或运算具有自反性同一个值连续异或两次会还原为原值。v7 strcmp(Arglist, c~scvdzKCEoDEZ[^roDICUMC); if ( !v7 ) { sub_401020(yes, v9); exit(0); }将经过两步加密后的字符串与内置密文c~scvdzKCEoDEZ[^roDICUMC逐字节对比。完全一致则输出yes校验通过否则输出error。写解密脚本chiperc~scvdzKCEoDEZ[^roDICUMCflagstep1foriinrange(len(chiper)):sord(chiper[i])^0x30step1chr(s)flaglist(step1)forjinrange(len(chiper)//2):tempflag[2*j]flag[2*j]flag[2*j1]flag[2*j1]tempprint(.join(flag))运行得到原路逆向就行

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价