可以从程序里找一些call的调用最终都会走到上面核心代码图位置(文字不太好表达),这个方法可以区分和VC的区别,非独立编译比较容易识别,入口特征和模块特征都有krnln.fnr。
拿到手一个exe 首先看他有没有加壳,要知道其是否加壳我们就得知道不同编译器编译出来的标准OEP是什么样子的。主流语言编译器包括VC,易语言,.net,delphi等等,及不常见得VB,asm等等。
一:VC6 标准OEP:
入口点代码是固定的代码(55 PUSH EBP),入口调用的API也是相同的,其中有的push地址不同程序可能不同;区段有四个也是固定的.text、.rdata、.data和.rsrc。
二:VS13之前标准OEP:
入口点只有两行代码,一个CALL后直接JMP,第一个CALL进去后调用的API也是相同的;区段相对于VC6多了一个.reloc。
三:易语言标准OEP:
(本人没学过E语言,目前也没逆过e程序,不太了解)可以从程序里找一些call的调用最终都会走到上面核心代码图位置(文字不太好表达),这个方法可以区分和VC的区别,非独立编译比较容易识别,入口特征和模块特征都有krnln.fnr。
001题:(网上关于这160道题的解答有很多,自己也来总结一下看看能不能加点点击量 (*^__^*) 嘻嘻……)
先用pe工具瞅瞅区段,恩~区段看起来正常。
双击打开 了解到八成是注册机之类的东东~ok 下面就该祭出OD开始逆了。
一路F9运行,如图:
不输入字符(因为我懒)保留默认字符,点击Check it Baby!提示TRY AGAIN,这时F12暂停并调用堆栈。
发现有两个MESSAGEBOX 其中一个地址7开头(一般在系统领空),一个004开头程序某模块调用(bingo!)
然后 右键 显示调用。
发现这么连续的一段。
在开始出(55 push ebp)和call messagebox出下断点。重新点击 Check it Baby!
右下窗口有返回值可以找到谁调用的 右键反汇编窗口跟随
一个判断跳jnz 一个强制跳jmp 于是乎把jnz处右键填充为nop 再次点击Check it Baby!一路运行(F9) ok!爆破成功!
***********************************************************************************************************************************
以上是爆破 那回头看这个程序肯定有一个算法是来根据name计算serial的下面我们就来分析这个注册机算法。
***********************************************************************************************************************************