serial150-wp
serial150-wp
0x00
exeinfope看无壳且为64位,用ida看发现不能正常反编译成代码,仔细看标红的地方一开始是错误,反编译将花指令0xe8
nop掉之后,还有很多自循环,还有很多db
占位的,全都nop掉。
最后得到:
太费劲了,我觉得最好是用idapython脚本写,但是我不知道咋写,只能手动nop了。
写脚本:
1 | ss = [69, 90, 57, 100, 109, 113, 52, 99, 56, 103, 57, 71, 55, 98, 65, 86] |
得到flag为EZ9dmq4c8g9G7bAV
。
0x01
见师傅https://blog.csdn.net/xiao__1bai/article/details/120197579
里面用的脚本去花指令,详细看看。
0x02
其余的师傅用的动调,不多说了,感觉这道题其实考的是用脚本去掉花指令。
主要的冗余有:0xe8花指令,一些循环垃圾代码,一些db垃圾代码。
最后的idapython脚本:(重点)
1 | from idc_bc695 import * #不加的话patchbytes报错 |
知识点1:汇编
1 | jz XXX // 跳转条件为ZF=1 |
知识点2:short 与 near ptr。
jmp short 标号(转到标号处执行命令)
这种格式的jmp指令实现的是上述的段内短转移,修改范围为-128~127;jmp near ptr 标号(转到标号处执行命令)
这种格式的jmp指令实现的是上述的段内近转移,在跳转范围大于-128~127时使用jmp short会编译失败。
知识点3:nop (No Operation) 指令作用。
通过 nop 指令的填充(nop指令长度从一个字节到九个字节,用于对齐),使指令对齐,从而减少取指令时的内存访问次数。一般用来内存地址偶数对齐,比如有一条指令占 3 字节,这时使用 nop 指令(原来几字节,nop后就几字节),CPU 就可以从第四个字节处读取指令。
清除由上一个算术逻辑指令设置的 flag 位。
- 破解:对于原程序中验证部分使用 nop 来填充,使验证失效。
留言
- 文章链接: https://wd-2711.tech/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!