c语言花指令怎么去除,[求助]去除驱动花指令--编写IDC脚本-问题

博客内容涉及使用IDA逆向工程工具对特定代码段进行模拟分析,关注点在于一段跳转指令和后续的call指令。通过对call指令的取消和编码更改,揭示了该call指令可能是一个‘花指令’,即非功能性的字节序列,展示了代码优化或混淆的技巧。
摘要由CSDN通过智能技术生成

3

2008-10-15 13:44

根据图片信息用IDA模拟结果如下:

10460   E9 17 01 00 00 90 90 90 90 90 8D 85 38 FF FF FF

10470   50 6A 14 68 40 22 01 00 E8 23 FE FF FF 0F 82 07

10480   00 00 00 0F 83 01 00 00 00 E8 8D 85 38 FF FF FF

10490   50 8D 85 98 FD FF FF 50 FF 15 B4 20 01 00 8D 85

104A0   78 FD FF FF 50 8D 85 98 FD FF FF 50 FF 15 AC 20

seg000:00010460 E9 17 01 00 00                                jmp     loc_1057C

seg000:00010460                               ; ---------------------------------------------------------------------------

seg000:00010465 90                                            db  90h ;

seg000:00010466 90                                            db  90h ;

seg000:00010467 90                                            db  90h ;

seg000:00010468 90                                            db  90h ;

seg000:00010469 90                                            db  90h ;

seg000:0001046A                               ; ---------------------------------------------------------------------------

seg000:0001046A 8D 85 38 FF FF FF                             lea     eax, [ebp-0C8h]

seg000:00010470 50                                            push    eax

seg000:00010471 6A 14                                         push    14h

seg000:00010473 68 40 22 01 00                                push    offset unk_12240

seg000:00010478 E8 23 FE FF FF                                call    loc_102A0

seg000:0001047D 0F 82 07 00 00 00                             jb      near ptr loc_10489+1

seg000:00010483 0F 83 01 00 00 00                             jnb     near ptr loc_10489+1

seg000:00010489

seg000:00010489                               loc_10489:

seg000:00010489

seg000:00010489 E8 8D 85 38 FF                                call    near ptr 0FF398A1Bh

seg000:00010489                               ; ---------------------------------------------------------------------------

seg000:0001048E FF                                            db 0FFh

seg000:0001048F FF                                            db 0FFh

seg000:00010490                               ; ---------------------------------------------------------------------------

seg000:00010490 50                                            push    eax

seg000:00010491 8D 85 98 FD FF FF                             lea     eax, [ebp-268h]

seg000:00010497 50                                            push    eax

seg000:00010498 FF 15 B4 20 01 00                             call    ds:dword_120B4  ; RtlInitUnicodeString

seg000:0001049E 8D 85 78 FD FF FF                             lea     eax, [ebp-288h]

seg000:000104A4 50                                            push    eax

seg000:000104A5 8D 85 98 FD FF FF                             lea     eax, [ebp-268h]

seg000:000104AB 50                                            push    eax

seg000:000104AC FF 15 AC 20 xx xx                             call    dword ptr ds:xxxx20ACh

其关键代码为:

seg000:0001047D 0F 82 07 00 00 00                             jb      near ptr loc_10489+1

seg000:00010483 0F 83 01 00 00 00                             jnb     near ptr loc_10489+1

seg000:00010489

seg000:00010489                               loc_10489:

seg000:00010489

seg000:00010489 E8 8D 85 38 FF                                call    near ptr 0FF398A1Bh

seg000:00010489                               ; ---------------------------------------------------------------------------

seg000:0001048E FF FF                                         dw 0FFFFh

seg000:00010490                               ; ---------------------------------------------------------------------------

seg000:00010490 50                                            push    eax

将00010489处的call指令取消(U命令),从其下一个字节0001048A开始编码(C命令)得到以下结果:

seg000:0001047D 0F 82 07 00 00 00                             jb      loc_1048A

seg000:00010483 0F 83 01 00 00 00                             jnb     loc_1048A

seg000:00010483                               ; ---------------------------------------------------------------------------

seg000:00010489 E8                                            db 0E8h ; ?

seg000:0001048A                               ; ---------------------------------------------------------------------------

seg000:0001048A

seg000:0001048A                               loc_1048A:

seg000:0001048A

seg000:0001048A 8D 85 38 FF FF FF                             lea     eax, [ebp-0C8h]

seg000:00010490 50                                            push    eax

可见call指令是假的,即E8为费字节,也就是所谓的“花指令”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值