这里介绍一种U盘做PE的方法也就是USB-ZIP启动模式的方法,下面一起来学学U盘做PE的方法吧
程序:某国产软件xxx.exe 注册码检验方式:网络校验 原文件加壳:未知壳 脱壳用trw找到入口点,pedump,修复iat,过程省略(很简单,不值得写) 脱壳后继续更踪找到注册码判断点 mov edx,xxxxxxx==》edx 是网络注册码 mov eax,xxxxxxx===》eax 是自己输入的注册码 call xxxxxxx==》这段是比较的call jz xxxxxx==》不等就完蛋 由于是网络校验,这个形式调用了很多次,每次都能d edx看到不同的注册码, 可见是把你输入的注册码和网络数据库里的注册码,逐个比较,如果相等就 成功,直接改那个jz就ok了,不过我们如何得到这个数据库所有的注册码呢? 我一开始的想法是用messagebox,更改其跳转到自己的程序: push 0 push edx push edx push 0 call messagebox 这样不是就能看到注册码么?但是有个缺点就是一次只能看到一个,而且还有可能导致 网络超时, 于是就换种思路,再每次调用的时候保存dx的注册码,最后再ExitProcess的时候把所有的注册码写到一个文件里面, 这样的话就需要先VirtualAlloc内存,然后creatfile,在lstrcpy,然后writefile,最后closefile 和VirtualFree这片内存 真是麻烦之又麻烦,如果程序没有这些函数,还要自己构造相关函数,对我这种能简化就简化的人来说,是比较痛苦的一件事 ,但是在实际操作的时候,突然想到,我写上篇文章的时候有过写ini的api,马上想到是WritePrivateProfileString,查api手册看看 BOOL WritePrivateProfileString( LPCTSTR lpAppName, // pointer to section name LPCTSTR lpKeyName, // pointer to key name LPCTSTR lpString, // pointer to string to add LPCTSTR lpFileName // pointer to initialization filename ); 真是个好东东啊,不要分配内存,也不要打开文件句柄,只要这个四个指针就ok 实际操作的时候就可以这样来更改,当然首先更改原来的程序跳到自己的程序 自己的程序: inc key==》每次都改变一下key的内容,不要把所有的注册码都写道一个key里面,那岂不是白干了:) push filename===>文件名(xxx.ini)的指针*自己在程序中找个空白的地方用winhex添一个就行了,然后转换成rav push 这个rav push edx==>本来是push 要更改的string地址,这里就是edx了,我们的注册码 push key==>key 名称的指针了 push sectionname==>段名称指针,(我实际构造的时候这个段名称就是serial) call WritePrivateProfileString mov eax,xxxxxx==》恢复原程序动作 jmp xxxxxx==》跳回原程序 程序执行完后,就可以去c:\windows(也就是你安装windows的目录)里面找这个xxx.ini文件了,打开一看,哈哈所有的注册码排列的整整齐齐 真是happy啊,由此拓展,用这样的方法可以记录很多有用的信息给我们,比如你想了解某个地址,堆栈,寄存器等的变化情况,又不想去一次一次中断看, 就插一段这样的语句,是不是很省事情哦 后记: 希望大家在操作的时候多动脑筋,没有作不到,只有想不到,很多看似简单的东西,其实还是有很大的用处的。