评论:运行程序,crashedl。采取在dumped_看看。exe已被盗代码直接修复。去从EP的第一个电话是个问题。















在OllyDbg,你可以看到:





IAT的部分是壳。这部分代码是由以下(第六智力3后),原本以为这只是装载机所需的API。其实








运行程序,crashedl。采取在dumped_看看。exe已被盗代码直接修复。去从EP的第一个电话是个问题。















在OllyDbg,你可以看到:





IAT的部分是壳。这部分代码是由以下(第六智力3后),原本以为这只是装载机所需的API。事实上,这名也是在正常使用的程序代码。



如果这一部分采取了importrec,属于不同的DLL API混排,和importrec不能处理它。

这些地址是736643处理的。





还有一个不可确定的(这实际上是弯曲的MessageBoxA)。







据估计做手脚的壳。当主程序被发现使用相同的API作为shell代码,调用相应的代码进行修改,使它调用在壳IAT。这可以加强与壳体连接。反过来,这里大部分的API(除因为只有壳)已经在避免IAT加密进口。



已经有一个好的API的名字,已经解决了acprotect_fixed。





立即函数指针:







请注意函数名和指针不完全对应于近7339a9代码。一些函数名或指针的地方。



你可以打电话给LoadLibrary,在程序的入口,GetProcAddress函数进行处理,并填写相应的地址或移动程序代码。您还可以修改使它叫清洁IAT你的前面而不是在壳IAT主程序代码(要处理,所以很多很麻烦的)。



值得注意的是,在acprotected_fixed,进口一些基本的API:



这些功能时所使用的shell代码加载API。这些地址直接装入IAT,007300d8开始。修改dumped_ EP。exe,从shell代码开始(你可以看到垃圾代码,这部分已经完成)。











注意到几个API(getmodulehandlea,GetProcAddress)用于装载代码改为使用IAT避免主程序后IAT加密所得到的。





4 API在壳代码导入直接从主program.oep 409de4回到前端IAT治疗后,使用pushad,pushad保存登记的价值。







注意,最后7301cc实际上是MessageBoxA,由acprotect曾经是一个SDK的接口。不要填写的MessageBox的真实地址。



以下73013c总是0在节目过程中,可能注册版。





处理后,在壳体的空间IAT已分配正确的价值。





7。修复替换代码(1)



与以往的ollyscript脚本,内存访问断点设置为代码段后停止。忽略所有异常。休息后,普通高考722416的提取码设置和运行。第一个电话是在004047e5。





有SMC,和之后的解决方案发布到acprotect_fixed,控制跟踪。这一进程的一部分,基本上是由于低版本相同。



1)检查返回地址表







在7225cc,EBX指向返回地址表,这是RVA:

















评论:运行程序,crashedl。采取在dumped_看看。exe已被盗代码直接修复。去从EP的第一个电话是个问题。















在OllyDbg,你可以看到:





IAT的部分是壳。这部分代码是由以下(第六智力3后),原本以为这只是装载机所需的API。其实








当找到匹配的地址,ECX等于该表项的偏移量,和第一个项目是0x2a。



2)检查操作表

查找操作码数据表(007262ed)与偏移1:



密文的操作码表:





计数器表(记录电话/地址,人数超过0x20次将解码的一个新的地址):





第一变形可变形代码:







3)调整堆栈以正确调用可变形代码并返回









4)破坏变形的代码,破坏变形代码。









5)执行可变形代码并返回原始程序。









6)补丁



代码的二进制副本是解决第一个dumped_ .exe(直接复制722416 7226b0代码)。



关掉722579解码(出7225c1 - 7226b0):





关闭之前的代码在7226a8损伤:





补丁72260c:锦州-> JMP,无论多少次使用相同的译码地址







复制正确的基址值,这里是0,和72fc1f 400000。











复制正确的10字节密钥(第一字节0)









执行,还是crashedl。



8。修复替换代码(2)



并且替换了代码,这里是异常的:





->





解释代码acprotect_fixed.exe.as后你可以看到,这些其实都是变形的调用代码。在第一次执行,在缓冲区的变形代码:









异或的结果:







目前dumped_。exe,地址的72ed83值是0(这些值是由装载机)。



对406df8变形代码最初是电话的键盘类型返回值,调用API的原始程序完全删除。壳的代码的作用类似于前一个。我们使用的返回地址查表得到相应的指针,并生成JMP DWORD PTR DS:{ xxxxxxxx }指令,处理类似72124c变形代码和调用正确的API。



返回RVA地址表的变形调用API:



开始:





结束:





可寻址的可变形代码数组下标表(每个项目的1字节)用于检查可变形代码指针数组。





可变形代码地址表(可变形代码的指针):

















评论:运行程序,crashedl。采取在dumped_看看。exe已被盗代码直接修复。去从EP的第一个电话是个问题。















在OllyDbg,你可以看到:





IAT的部分是壳。这部分代码是由以下(第六智力3后),原本以为这只是装载机所需的API。其实








开始写入内联补丁:



使用相同的搜索行动,得到了相应的变形代码拷贝,和相应的API地址获得,由跳绳加密得到洁净的IAT相比。当匹配值,相应的操作码被修改,它是直接调用在IAT的地址。



使用ollyscript脚本跳过IAT加密,我们不能得到的变形代码。在那个时候,API的真实地址是从扭曲的代码地址表中获得的。有46个无效指针,0xcccccccc。



另一个问题很难解决,取而代之的代码只有5字节:



这里的电话是0xe8,这要求在shell.inlinepatch绝对地址写在一定程度上,如果你想修改代码和调用它的IAT,你需要一个相对6 bytesl地址电话。这是一个低级的错误。



现在补丁的结果:





真正需要的是:







这是保持变形代码的唯一方式。把相应的代码复制在壳在OEP生成正确的变形代码和程序后壳看不到API直接的名字,很不舒服。



有移动壳体的相应代码。修改dumped_ .exe入口代码,并在装载空间填充IAT后,跳到加工变形的代码位置。







装载机需要调用几个API在处理IAT,确定DLL的地址映射的API地址等,并保存所需的数据(我们有一个干净的Journal):







由于IAT加密是前避免,数据生成所需的变形代码已被正确的API地址,使用loadpe拯救acprotect的iData部分文件,然后添加到dumped_ .exe。







以部分密文数据复制到dumped_的IDATA段。exe覆盖干净的IAT,我们不需要它了。现在只是打造一个好的网站J.







去装载的IAT处理代码和使用API地址,你救了几个小的修改,等等。





IAT和变形代码结束回到OEP。







执行。挂我了。这次是一个内存访问异常。你可知道,它在钩MessageBoxA在这个代码没有仔细看了看,有几个开关柜分支。第一次EAX 5。







进入后,有几个表查找操作。







通过调用钩MessageBoxA返回地址的检查表,这个表是在721f25,有dumped_ 21项文件。

注意查找不是查找等价的,而是查找大于返回地址值和最近值的值。







- >







有2个其他的表在这里。在7220b5表的数据量大小,dumped_。exe,有:







问题在第三张桌子上:







转储的数据是0。这个代码需要从主程序复制到表中数据的地址。在装入器中执行时,动态分配内存的指针在这里填充。







很显然,这些值不能直接复制,有一种简单的方式来欺骗程序。你可以看到从尺寸表,最大的数据是fd5d。加1节再次与LoadPE,和尺寸范围。







修改dumped_ .exe和设置21个数据点它所有的地址。







显示Windows下运行,但不能回应W2K,输入。你运行在WinXP不显示。

接下来是交上主程序,这需要耐心的坐在长凳上。