odjava 反编译译注册码在注释里

反编译工具 Mdebug 1.04修改版 快捷键同OD:
大家一定厌倦了Windbg或Ollydbg吧?现在向大家提供一款调试器,你用他可以得到全新的调试体验。
MyDebug不是一个演示程序或调试器原型。MyDebug是一个切实可用、功能丰富的调试器。感谢那些支持MyDebug和VMPDebugger的人们,祝大家调试愉快!
bug报告或任何的建议、意见,请及时反馈。
更新了一下MDebug, 增加了快捷键自定义功能,修复了2个界面上的bug,感谢Aaah和obaby报告这2个bug
上传了plugin SDK。
增加了脚本与命令行功能
1.bug修改:如果跳转到的目标地址在当前窗口中,在目标地址前进行箭头指示
2.bug修改:如果打开了hwnd窗口进行attach可能导致假死
3.bug修改:部分通过ida导出的map文件不能加载
4.bug修改:如果在未打开断点窗口状态下设置了消息断点,那么在打开的断点窗口中有相同的2条记录(感谢FishSeeWater报告此漏洞)
5.汇编窗口增加格式化复制功能
6.增加脚本本身可以进行调试的功能
7.优化前进、后退功能,后退可以使用快捷键(ESC)
8.增加Patch管理功能,汇编窗口增加jxx跳转指令修改功能、汇编指令修改功能(鼠标双击汇编空白处或按空格键)
9.增加字符串引用查找功能
1.支持WIN64调试
2.bug修改:设置消息断点时,如果该位置已经设置了断点(包括消息断点),那么会提示失败
3.bug修改:在未调试状态下,如果脚本对寄存器赋值,程序会崩溃
4.增加了hwnd查看中的右键菜单项:切换到此窗口所属线程
5.增加内存窗口的字体颜色设置
6.将SDK头文件(plug.h)中的地址参数类型统一修改为LPVOID,以适应win32/win64编程
7.其他的细小bug修改及优化&
推荐使用QQ旋风下载本站软件,使用 WinRAR v3.10 以上版本解压本站软件。
如果这个软件总是不能下载的请联系我们(见页尾),谢谢合作!!
凡本站资源经过站长查毒后上传,以防万一,如发现问题请立刻联系我们。
如果遇到什么问题,请到本站论坛去咨询,我们将在那里提供更多 、更好的资源!
本站提供的外挂资源均来自网络,本站只做收集汇总工作,由外挂导致的任何问题与本站无关!请问OD能否修改注释里面的内容_百度知道
请问OD能否修改注释里面的内容
有没有其他的软件能修改这个地址。谢谢各位,我想把这个网址换成其他的网址,如图我用Ollydbg绿化一个软件,可是修改之后保存还是原来的网址,希望结识一位软件绿化破解爱好者,注释栏是连接的广告网址
//f./zhidao/wh%3D450%2C600/sign=263bda600fb30f2435cfe407fda5fd75/8cb1cbe9b3de4927://f.hiphotos.hiphotos.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="/zhidao/wh%3D600%2C800/sign=f6aad31ad4bfae6cbe9b3de4927.baidu.baidu.jpg" esrc="http://f.com/zhidao/pic/item/8cb1cbe9b3de4927<a href="http
提问者采纳
你可以输入 dd 00561C48那个注释只是OD自己加上去的,他的值保持在那个PUSH的地址里,你去那个地址去看下就知道了,你改下这里的值就可以了,然后在走下角的窗口中就可以看到这个字符串了。最后保存
提问者评价
在哪里输入DD?查找,能详细解释一下么
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁OD+IDA6.1破解HideWizardv9.29(无忧隐藏)
偶以前搞过一些,但都是一些软柿子,前几天有隐藏木马这么个需求,包括进程、窗口、硬盘文件等,非要用HideWIzard出手不可。HideWIzard6.4有破解版但功能不够,只好拿HideWIzard最新版9.29开刀了。感觉还是挺麻烦的,也许是我水平很菜把,废话不说进入正题
0)先对程序的情况说明一下,程序总共有三处验证,有些可以观察到,有些是破解过程中发现
1.对注册码在客户端进行初步判断,输入不正确的话什么提示都没有,否则进入第二步服务器激活验证;
2.与服务器通信,在static控件显示返回结果;
3.使用imagehlp进行EXE校验,如果发现二进制被修改则自动退出
下面详细阐述哈
1)首先是PEiD查壳,啥也没发现,事实上到最后我也不知道是什么壳,也没学过脱壳,汗一个,哪位大大知道不妨告知哈。IDA6.1打开EXE,可以判断是MFC程序
2)OD加载程序后,自带的7E42xxxx断点一定要清除,否则会导致假死,狂按F9过一分钟能缓回来,缓不回来只好重启了。加载成功后窗口切换焦点时也是一顿一顿的,不知是不是有意为之,调试过程中尽量不要切换焦点。顿的程度好像与系统和OD也有关系,具体作用关系不明,最好找个能自动清除debug标志位的。OD换了好几个才碰上个顺手的,我用的ODbyDYK v1.10里的Pza74.exe,能自动清除debug标志位,对call jmp等指令能高亮显示,Pza74缺点是插件不如OllyICE多,但OllyICE没高亮,看的很头疼。\
3)正式进入调试步骤,首先需要在激活按钮处下断,因为没有任何提示,只好在CCmdTarget::OnCmdMsg处下断,在IDA记下地址在OD直接bp。OnCmdMsg第四个参数即为消息响应函数。函数如下,程序在0042AB9B处检查注册码位数,只要让输入的注册码为17位就不会跳到函数末尾,在末尾处可以看出SendMessageA是进入下一步的关键,因此中间的算法就不用看了,直接找跳转,把该nop的nop掉。
0042AB5F&& /.& 55&&&&&&&&&&&& push ebp
0042AB60&& |.& 8BEC&&&&&&&&&& mov ebp,esp
0042AB62&& |.& 83EC 14&&&&&&& sub esp,14
0042AB65&& |.& 56&&&&&&&&&&&& push esi
0042AB66&& |.& 8BF1&&&&&&&&&& mov esi,ecx
0042AB68&& |.& 8975 EC&&&&&&& mov dword ptr ss:[ebp-14],esi
0042AB6B&& |.& FF15 C4D14600& call dword ptr ds:[&&KERNEL32.GetTickCount&]&&&& ; [GetTickCount
0042AB71&& |.& 8BC8&&&&&&&&&& mov ecx,eax
0042AB73&& |.& 2B0D A4F44800& sub ecx,dword ptr ds:[48F4A4]
0042AB79&& |.& 81F9 2C010000 &cmp ecx,12C
0042AB7F&& |.& 0F82 & jb HideWiza.0042ACC5
0042AB85&& |.& 6A 01&&&&&&&&& push 1
0042AB87&& |.& 8BCE&&&&&&&&&& mov ecx,esi
0042AB89&& |.& A3 A4F44800&&& mov dword ptr ds:[48F4A4],eax
0042AB8E&& |.& E8 B0530000&&& call HideWiza.0042FF43
0042AB93&& |.& 81C6 & add esi,410
0042AB99&& |.& 8B06&&&&&&&&&& mov eax,dword ptr ds:[esi]
0042AB9B&& |.& &&&& cmp dword ptr ds:[eax-C],11 ////////////////////
0042AB9F&& |.& 8BCE&&&&&&&&&& mov ecx,esi
0042ABA1&& |.& 0F85 & jnz HideWiza.0042ACBB ////////////////不成立则跳到0042ACC5处,不能跳,需要nop掉
0042AC9B&& |. /75 1C&&&&&&&&& jnz short HideWiza.0042ACB9 /////////////////不能跳,需要nop掉
0042AC9D&& |. |394D F0&&&&&&& cmp dword ptr ss:[ebp-10],ecx
0042ACA0&& |. |75 17&&&&&&&&& jnz short HideWiza.0042ACB9 /////////////////不能跳,需要nop掉
0042ACA2&& |. |8B45 EC&&&&&&& mov eax,dword ptr ss:[ebp-14]
0042ACA5&& |. |6A 0A&&&&&&&&& push 0A&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ; /lParam = A
0042ACA7&& |. |6A 01&&&&&&&&& push 1&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&; |wParam = 1
0042ACA9&& |. |68 CA040000&&& push 4CA&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ; |Message = MSG(4CA)
0042ACAE&& |. |FF70 20&&&&&&& push dword ptr ds:[eax+20]&&&&&&&&&&&&&&&&&&&&&& ; |hWnd
0042ACB1&& |. |FF15 84D54600& call dword ptr ds:[&&USER32.SendMessageA&]&&&&&& ; \SendMessageA
0042ACB7&& |. |EB 0C&&&&&&&&& jmp short HideWiza.0042ACC5
0042ACB9&& |& \8BCE&&&&&&&&&& mov ecx,esi
0042ACBB&& |&& 68 F2DC4600&&& push HideWiza.0046DCF2
0042ACC0&& |.& E8 1B7BFDFF&&& call HideWiza.
0042ACC5&& |&& 5E&&&&&&&&&&&& pop esi
0042ACC6&& |.& C9&&&&&&&&&&&& leave
0042ACC7&& \.& C3&&&&&&&&&&&& retn
4)用ue把exe改掉后发现程序自动退出,猜测是某种校验,这时程序不会弹出窗口,判断是在CXXDlg构造函数或OnInitialDialog等处。直接在入口处跟进,这里有个取巧的办法,直接od同时加载未修改和已修改的一起debug,比较哪里不一样,如果过程中哪个call直接把窗口弹出来或是退出,就需要重新加载跟进这个call。最后发现下面的代码,终于找到了,就是imagehlp.MapFileAndCheckSumA这个东西做的怪。查了一下imagehlp,的确是进行二进制校验的一个东东。0041E36E处可以看出[ebp-2C]与[ebp-28]一个是编译时生成的,一个是现算的。后面jnz判断是否一致,后面的OpenMutexA啥的应该是保证程序单例,是程序后面的逻辑,因此把jnz nop掉即可。
&&& .& E9 AD030000&&& jmp HideWiza.0041E6FB
0041E34E&&& && 8D45 D8&&&&&&& lea eax,dword ptr ss:[ebp-28]
&&& .& 50&&&&&&&&&&&& push eax
&&& .& 8D45 D4&&&&&&& lea eax,dword ptr ss:[ebp-2C]
&&& .& 33FF&&&&&&&&&& xor edi,edi
&&& .& 50&&&&&&&&&&&& push eax
&&& .& 47&&&&&&&&&&&& inc edi
&&& .& 68 40EA4800&&& push HideWiza.0048EA40
0041E35E&&& .& 897D D4&&&&&&& mov dword ptr ss:[ebp-2C],edi
&&& .& 895D D8&&&&&&& mov dword ptr ss:[ebp-28],ebx
&&& .& FF15 FCD74600& call dword ptr ds:[&&imagehlp.Ma&;& imagehlp.MapFileAndCheckSumA /////////////////////////////////////////////Checksum!!!
0041E36A&&& .& 85C0&&&&&&&&&& test eax,eax
0041E36C&&& .& 75 0C&&&&&&&&& jnz short HideWiza.0041E37A
0041E36E&&& .& 8B45 D4&&&&&&& mov eax,dword ptr ss:[ebp-2C]
&&& .& 3B45 D8&&&&&&& cmp eax,dword ptr ss:[ebp-28]
&&& .& 0F85 & jnz HideWiza.0041E6FB ////////////////////////////////should not jmp, so nop it
0041E37A&&& && 68 6C3E4700&&& push HideWiza.00473E6C&&&&&&&&&& ;& ASCII &SEAN_U_HIDE_WIZARD&
0041E37F&&& .& 8D4D E0&&&&&&& lea ecx,dword ptr ss:[ebp-20]
&&& .& E8 604BFEFF&&& call HideWiza.00402EE7
&&& .& FF75 E0&&&&&&& push dword ptr ss:[ebp-20]&&&&&& ; /MutexName
0041E38A&&& .& 895D FC&&&&&&& mov dword ptr ss:[ebp-4],ebx&&&& ; |
0041E38D&&& .& 53&&&&&&&&&&&& push ebx&&&&&&&&&&&&&&&&&&&&&&&& ; |Inheritable
0041E38E&&& .& 57&&&&&&&&&&&& push edi&&&&&&&&&&&&&&&&&&&&&&&& ; |Access
0041E38F&&& .& FF15 2CD44600& call dword ptr ds:[&&KERNEL32.Op&; \OpenMutexA
&&&.& 8B7D DC&&&&&&& mov edi,dword ptr ss:[ebp-24]
&&& .& 0& mov dword ptr ds:[edi+A4],eax
0041E39E&&& .& 3BC3&&&&&&&&&& cmp eax,ebx
&&& .& 0F84 & je HideWiza.0041E43D
5)终于到最后一步,这时运行程序随便输入注册码注册,发现还有服务器验证,IDA里发现程序网络通信用的是CHttpFile,继承于CInternetFile,结合IDA6.1的hex rays进行反编译,CInternetFile有四个方法,Read ReadString Write WriteString,我们主要关心的是读取,记下地址在OD里下断,发现程序调用的是CInternetFile::Read函数。一般人写通信程序都会把建立连接、发送、接受、关闭连接自己封装一下,因此可以顺便在IDA里把周围的关于网络通信的函数没名字的都命名一下,找调用者就结合OD,这么比较方便查看。
用OD在CInternetFile::Read往上导,发现一个可疑函数,IDA反编译一下:
signed int __thiscall sub_42BFB4(void *this, int a2, int a3)
& int v3; // edi@1
& void *v4; // ebx@1
& int v6; // eax@3
& int v7; // eax@3
& int v8; // eax@3
& int v9; // edi@3
& const CHAR *v10; // ebx@5
& int v11; // esi@5
& int v12; // esi@7
& int v13; // eax@10
& int v14; // eax@10
& int v15; // eax@12
& int v16; // eax@12
& int v17; // eax@14
& int v18; // eax@14
& int v19; // eax@15
& int v20; // eax@15
& int v21; // eax@15
& int v22; // [sp+Ch] [bp-20h]@11
& const CHAR *v23; // [sp+10h] [bp-1Ch]@3
& char *v24; // [sp+14h] [bp-18h]@15
& int v25; // [sp+18h] [bp-14h]@3
& int v26; // [sp+1Ch] [bp-10h]@3
& int v27; // [sp+28h] [bp-4h]@1
& char v28; // [sp+2Ch] [bp+0h]@1
& char S // [sp+82Ch] [bp+800h]@15
& char v30; // [sp+82Dh] [bp+801h]@15
& unsigned int v31; // [sp+C2Ch] [bp+C00h]@1
& v31 = (unsigned int)&v28 ^ __security_
& v3 = a3;
& v27 = 0;
& if ( !WaitForSingleObject(hHandle, 0) )
&&& goto LABEL_2;
& unknown_libname_115(v3);
& v6 = sub_435E86(v26);
& unknown_libname_113(v6);
& v7 = sub_435E86(v26);
& unknown_libname_113(v7);
& LOBYTE(v27) = 2;
& sub_402793(&a2);
& sub_42BF09(&v25, &v23);
& LOBYTE(v27) = 3;
& v8 = (int)_LN34_4(v4, 0, 0, 0, 0);
& v9 = v8;
& if ( !v8 )
&&& ATL::CStringData::Release(v23 - 16);
&&& ATL::CStringData::Release(v25 - 16);
&&& ATL::CStringData::Release(a2 - 16);
&&& return -20;
& v10 = v23;
& v27 = 2;
& LOBYTE(v27) = 5;
& v11 = (int)sub_, 0, v23, 0, 1u, 0, 0, 0xu);
& if ( !v11 )
&&& goto LABEL_6;
& v27 = 2;
& LOBYTE(v27) = 7;
& if ( !CHttpFile::SendRequest(v11, 0, 0, 0, 0) ) ///////////////////////////////////////发送消息
&&& (*(void (__thiscall **)(int))(*(_DWORD *)v11 + 76))(v11);
&&& v13 = *(_DWORD *)v11;
&&& v25 = 1;
&&& (*(void (__thiscall **)(int, signed int))(v13 + 4))(v11, 1);
&&& (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 12))(v9);
&&& v14 = *(_DWORD *)v9;
&&& v25 = 1;
&&& (*(void (__thiscall **)(int, signed int))(v14 + 4))(v9, 1);
&&& ATL::CStringData::Release(v10 - 16);
&&& ATL::CStringData::Release(v25 - 16);
&&& v25 = -20;
&&& v12 = v25;
&&& ATL::CStringData::Release(a2 - 16);
&&& return v12;
& v27 = 2;
& if ( !CHttpFile::QueryInfoStatusCode(&v22) )
&&& (*(void (__thiscall **)(int))(*(_DWORD *)v11 + 76))(v11);
&&& v15 = *(_DWORD *)v11;
&&& v25 = 1;
&&& (*(void (__thiscall **)(int, signed int))(v15 + 4))(v11, 1);
&&& (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 12))(v9);
&&& v16 = *(_DWORD *)v9;
&&& v25 = 1;
&&& (*(void (__thiscall **)(int, signed int))(v16 + 4))(v9, 1);
&&& ATL::CStringData::Release(v10 - 16);
&&& ATL::CStringData::Release(v25 - 16);
&&& v25 = -21;
&&& goto LABEL_7;
& if ( v22 != 200 )
&&& (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v11 + 76))(v11);
&&& v17 = *(_DWORD *)v11;
&&& v25 = 1;
&&& (*(void (__thiscall **)(int, signed int))(v17 + 4))(v11, 1);
&&& (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 12))(v9);
&&& v18 = *(_DWORD *)v9;
&&& v25 = 1;
&&& (*(void (__thiscall **)(int, signed int))(v18 + 4))(v9, 1);
&&& v12 = v22;
&&& ATL::CStringData::Release(v10 - 16);
&&& ATL::CStringData::Release(v25 - 16);
&&& goto LABEL_8;
& Src = 0;
& memset(&v30, 0, 0x3FFu);
& sub_4027E0(Caption);
& v19 = *(_DWORD *)v11;
& v25 = 1000;
& v24 = &S
& (*(void (__thiscall **)(int, char *, signed int))(v19 + 52))(v11, &Src, 1000); ////////////////CInternetFile_Read 此处地址 一共两次read,调用CInternet::Read
& sub_4027E0(&Src); ///////////////////// --&调用sub_402466 Src返回的c字符串 此处地址为 写了2个byte的内存,后面都不用看了
& (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v11 + 76))(v11); ////////////////////////////CInternetFile::Close
& v20 = *(_DWORD *)v11;
& v25 = 1;
& (*(void (__thiscall **)(int, signed int))(v20 + 4))(v11, 1); ////////////////////////////CHttpFile::_scalar_deleting_destructor_
& (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 12))(v9); ////////////////////////////CInternetFile::Close
& v21 = *(_DWORD *)v9;
& v25 = 1;
& (*(void (__thiscall **)(int, signed int))(v21 + 4))(v9, 1); ////////////////////////////sub_440C6D一些字符串释放
& ATL::CStringData::Release(v10 - 16);
& ATL::CStringData::Release(v25 - 16);
& ATL::CStringData::Release(a2 - 16);
& return 1;
6)可以发现干货就在最后几行,内部调用CInternet::Read,整个函数一共调用了两次,用ethereal截报文发现客户端向发送两个HTTP请求,服务器回的都是很简单的字符串1,存在Src里,sub_4027E0(&Src)处理一下,写了两个2byte的内存,位置不固定。
7)明显的思路是在Src处下内存访问断点,发现到了strtoxl这么个函数,是C的一个内部使用的函数,往上导,到strtol,最后到atol,后来发现这个地址被读了十几次,于是干脆换了另一个方法。程序在请求返回后会设置static字符串,于是在SetWindowTextA处下API断点。往上倒腾,功夫不负有心人,发现了程序的验证逻辑:
&&& & \FF75 DC&&&&&&& push dword ptr ss:[ebp-24]
&&& .& E8 &&& call HideWiza.
0042B1FD&&& .& 83F8 1E&&&&&&& cmp eax,1E
&&& .& 59&&&&&&&&&&&& pop ecx
&&& .& 7D 77&&&&&&&&& jge short HideWiza.0042B27A //////////////////////////////////jump it
&&& .& 83F8 02&&&&&&& cmp eax,2
&&& .& 75 21&&&&&&&&& jnz short HideWiza.
&&& .& 51&&&&&&&&&&&& push ecx
&&& .& 8BCC&&&&&&&&&& mov ecx,esp
0042B20B&&& .& 8965 F0&&&&&&& mov dword ptr ss:[ebp-10],esp
0042B20E&&& .& 68 &&& push HideWiza.
&&& .& E8 CF7CFDFF&&& call HideWiza.00402EE7
&&& .& 8D45 F0&&&&&&& lea eax,dword ptr ss:[ebp-10]
0042B21B&&& .& 50&&&&&&&&&&&& push eax
0042B21C&&& .& E8 EFEEFFFF&&& call HideWiza.
&&& .& 59&&&&&&&&&&&& pop ecx
&&& .& 59&&&&&&&&&&&& pop ecx
&&& .& C645 FC 0A&&&& mov byte ptr ss:[ebp-4],0A
&&& .^ EB 9D&&&&&&&&& jmp short HideWiza. ////////////////////////////jump back to death
&&& && 3BC7&&&&&&&&&& cmp eax,edi
0042B22B&&& .& 74 29&&&&&&&&& je short HideWiza.
0042B22D&&& .& 83F8 14&&&&&&& cmp eax,14
&&& .& 74 24&&&&&&&&& je short HideWiza.
&&& .& 51&&&&&&&&&&&& push ecx
&&& .& 8BCC&&&&&&&&&& mov ecx,esp
&&& .& 8965 F0&&&&&&& mov dword ptr ss:[ebp-10],esp
&&& .& 68 E4524700&&& push HideWiza.
0042B23D&&& .& E8 A57CFDFF&&& call HideWiza.00402EE7
&&& .& 8D45 F0&&&&&&& lea eax,dword ptr ss:[ebp-10]
&&& .& 50&&&&&&&&&&&& push eax
&&& .& E8 C5EEFFFF&&& call HideWiza.
0042B24B&&& .& 59&&&&&&&&&&&& pop ecx
0042B24C&&& .& 59&&&&&&&&&&&& pop ecx
0042B24D&&& .& C645 FC 0C&&&& mov byte ptr ss:[ebp-4],0C
&&& .^ E9 70FFFFFF&&& jmp HideWiza. ////////////////////////////jump back to death
&&& && 51&&&&&&&&&&&& push ecx
&&& .& 8BCC&&&&&&&&&& mov ecx,esp
&&& .& 8965 F0&&&&&&& mov dword ptr ss:[ebp-10],esp
0042B25C&&& .& 68 0C534700&&& push HideWiza.0047530C
&&& .& E8 817CFDFF&&& call HideWiza.00402EE7
&&& .& 8D45 F0&&&&&&& lea eax,dword ptr ss:[ebp-10]
&&& .& 50&&&&&&&&&&&& push eax
0042B26A& &&.& E8 A1EEFFFF&&& call HideWiza.
0042B26F&&& .& 59&&&&&&&&&&&& pop ecx
&&& .& 59&&&&&&&&&&&& pop ecx
&&& .& C645 FC 0B&&&& mov byte ptr ss:[ebp-4],0B
&&& .^ E9 4CFFFFFF&&& jmp HideWiza. ////////////////////////////jump back to death
0042B27A&&& && 8B4D E4&&&&&&& mov ecx,dword ptr ss:[ebp-1C]
0042B27D&&& .& 8BD1&&&&&&&&&& mov edx,ecx
0042B27F&&& .& 6BD2 0D&&&&&&& imul edx,edx,0D
&&& .& 81EA 2E160000& sub edx,162E
&&& .& 3BD0&&&&&&&&&& cmp edx,eax
0042B28A&&& .& 74 46&&&&&&&&& je short HideWiza. //////////////////////////////////jump it
0042B28C&&& .& 51&&&&&&&&&&&& push ecx
0042B28D&&& .& 8BCC&&&&&&&&&& mov ecx,esp
0042B28F&&& .& 8965 F0&&&&&&& mov dword ptr ss:[ebp-10],esp
&&& .& 68 E4524700&&& push HideWiza.
&&& .& E8 4B7CFDFF&&& call HideWiza.00402EE7
0042B29C&&& .& 8D45 F0&&&&&&& lea eax,dword ptr ss:[ebp-10]
0042B29F&&& .& 50&&&&&&&&&&&& push eax
&&& .& E8 6BEEFFFF&&& call HideWiza.
&&& .& 59&&&&&&&&&&&& pop ecx
&&& .& 59&&&&&&&&&&&& pop ecx
&&& .& FF30&&&&&&&&&& push dword ptr ds:[eax]&&&&&&&&&&&&&& ; /Arg1
&&& .& 8B4D E0&&&&&&& mov ecx,dword ptr ss:[ebp-20]&&&&&&&& ; |
0042B2AC&&& .& C645 FC 0D&&&& mov byte ptr ss:[ebp-4],0D&&&&&&&&&&& ; |
&&& .& E8 2A1F0000&&& call HideWiza.0042D1DF&&&&&&&&&&&&&&& ; \HideWiza.0042D1DF
&&& .& 8B4D F0&&&&&&& mov ecx,dword ptr ss:[ebp-10]
&&& .& 83C1 F0&&&&&&& add ecx,-10
0042B2BB&&& .& C645 FC 07&&&& mov byte ptr ss:[ebp-4],7
0042B2BF&&& .& E8 DF5DFDFF&&& call HideWiza.
&&& .& 8B4D EC&&&&&&& mov ecx,dword ptr ss:[ebp-14]
&&& .& 57&&&&&&&&&&&& push edi&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ; /Arg1
&&& .& E8 F61F0000&&& call HideWiza.&&&&&&&&&&&&&&& ; \HideWiza.
0042B2CD&&& .& E9 B8020000&&& jmp HideWiza.0042B58A
&&& && 6BC9 0B&&&&&&& imul ecx,ecx,0B
&&& .& 81F1 & xor ecx,607
0042B2DB&&& .& 8BC1&&&&&&&&&& mov eax,ecx
0042B2DD&&& .& 894D EC&&&&&&& mov dword ptr ss:[ebp-14],ecx
&&& .& B9 &&& mov ecx,2710
&&& .& 3BC1&&&&&&&&&& cmp eax,ecx
&&& .& 7D 0A&&&&&&&&& jge short HideWiza. //////////////////////////////////auto jump it
&&& && 6BC0 0A&&&& &&&imul eax,eax,0A
0042B2EC&&& .& 3BC1&&&&&&&&&& cmp eax,ecx
0042B2EE&&& .^ 7C F9&&&&&&&&& jl short HideWiza.
&&& .& 8945 EC&&&&&&& mov dword ptr ss:[ebp-14],eax
&&& && 3D A0860100&&& cmp eax,186A0
&&& .& 7C 15&&&&&&&&& jl short HideWiza.0042B30F //////////////////////////////////auto jump it
0042B2FA&&& .& EB 03&&&&&&&&& jmp short HideWiza.0042B2FF
0042B2FC&&& && 8B45 EC&&&&&&& mov eax,dword ptr ss:[ebp-14]
0042B2FF&&& && 6A 0A&&&&&&&&& push 0A
&&& .& 99&&&&&&&&&&&& cdq
&&& .& 59&&&&&&&&&&&& pop ecx
&&& .& F7F9&&&&&&&&&& idiv ecx
&&& .& 3D A0860100&&& cmp eax,186A0
0042B30A&&& .& 8945 EC&&&&&&& mov dword ptr ss:[ebp-14],eax
0042B30D&&& .^ 7D ED&&&&&&&&& jge short HideWiza.0042B2FC
0042B30F&&& && 893D 40F04800& mov dword ptr ds:[48F040],edi
&&& .& E8 6CAB0000&&& call HideWiza.00435E86
0042B31A&&& .& 50&&&&&&&&&&&& push eax
0042B31B&&& .& 8D4D E4&&&&&&& lea ecx,dword ptr ss:[ebp-1C]
0042B31E&&& .& E8 816DFDFF &&&call HideWiza.
&&& .& FF75 EC&&&&&&& push dword ptr ss:[ebp-14]
&&& .& 8D45 E4&&&&&&& lea eax,dword ptr ss:[ebp-1C]
&&& .& 68 F0EF4600&&& push HideWiza.0046EFF0&&&&&&&&&&&&&&& ;& ASCII &%d&
8)0042D21B是CWnd::SetWindowText,他调用SetWindowTextA显示序列号无效字符串
0042D21B的调用者为0042B1CB,找通向0042B1CB的跳转,有三处,还都在后边,分别是227 251 275,分析一下这段代码,发现eax被判了多次,且eax=1,可以初步判定这就是服务器返回值。处判断eax是不是不小于1e,如果小于1e,再判断是不是2,如果是2,进入227玩完;不是2,判断是不是14,不是的话进入251玩完,是的话进入275玩完。总之是进入了死胡同,只好在前面的处jmp掉。(顺便说一句,自己修改一下返回值对照程序可以发现数字的含义:2是序列号已存在,14没看,1也就是其它情况是序列号无效。)随后在0042B28A处发现一个je,一般相等肯定是验证对不对,肯定是好的,不用看直接jmp掉,最后什么都没改,程序已经crack掉了,记录一下中间没改却实现的跳转,和,为保险起见,可以jmp一下。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。OD反编译视频教程
一前辈教我的这样可以找到外G的病毒码,知道的留教我下.或者留个教程和软件地址.感激不尽. 先把汇编练熟。然后OD就不在话下了。 听不懂了... 如果不懂汇编语言,还搞什么反编译。先学汇编吧。 = =,我什么都不懂.就教.反编译是,汇编,数据结构,逆向工程,加密算法,等多种技术的结合。不是那么容易学的。而且要还原一个程序需要很强的功底的。还是直接教OD吧 能学多少学多少 OD是汇编级调试工具,如果你看不懂汇编还是无法调试的,基础是汇编。
由编辑,转载请注明出处! (
文章地址: /News/digi/550.html
电子数码相关文章}

我要回帖

更多关于 java 反编译 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信