|
|
|
|
|
关于pedit的入口点疑问
入口点是RVA,需要将地址值减去模块加载的基址,默认基址是4M(0x00400000),而不是1G(0x40000000),楼主多打了两个0。 |
|
[求助]初学者求助.
MFC和汇编??? 你这个问题倒也新鲜。 我个人感觉,如果需要快速开发程序的话,可以学习一下MFC。但MFC对提供编程水平没有太大的帮助,有时间还是多学学SDK的方式,会发现整个思维方式与MFC都是不同的。 另外,SDK的方式,用C、C++,或者PASCAL,或者汇编语言,基本上都是类似的。当你以某一种语言为载体,掌握了SDK的方式后,再去看用其它语言开发的程序,你会觉得一点困难都没有。 |
|
[已解]没壳了,VB的 老在里面跳,找不到密码,崩溃
刚看了一下,不是P-CODE,是本机代码。 VB的东西用VB Decompiler来处理,可以看到接近源码的东西,剩下分析就方便多了。 按钮事件函数是402470,需要动态分析的直接在这里下断点即可。 贴上VB Decompiler的结果,参考之。 Private Sub CmdLoad_Click() '402470 loc_00402495: var_10 = &H401148 loc_00402529: call MSVBVM60.DLL.__vbaAryConstruct2(var_34, 00401D60h, 00000003h, arg_8, esi, ebx) loc_00402531: call On Error ...(00000001h) loc_00402576: call MSVBVM60.DLL.__vbaR8Str(Text1.Text, "", arg_8, arg_8) loc_0040257C: call MSVBVM60.DLL.__vbaFPInt loc_00402582: call MSVBVM60.DLL.__vbaFpR8 loc_00402588: fcomp real8 ptr [00401170h] ; loc_0040258E: fstsw ax If MSVBVM60.DLL.__vbaFpR8 <> 0 Then loc_0040259A: GoTo loc_0040259E End If loc_0040259E: 'Referenced from 0040259A loc_0040259E: neg eax If ax <> esi Then loc_004025BF: var_8C = 80020004h loc_004025CA: var_94 = 10 loc_004025D0: var_7C = 80020004h loc_004025D3: var_84 = 10 loc_004025D9: var_6C = 80020004h loc_004025DC: var_74 = 10 loc_004025DF: var_9C = "WRONG" loc_004025E9: var_A4 = 8 loc_004025FC: var_64 = 10 loc_00402615: GoTo loc_00402CAB End If loc_0040261A: var_9C = 1 loc_0040262F: var_AC = &H14 loc_0040263F: var_BC = 1 For var_48 = 1 To &H14 Step 1 If "" <> esi Then loc_00402684: var_48 = @CLng("") If var_48 >= 101 Then loc_00402691: call MSVBVM60.DLL.__vbaGenerateBoundsError("", 2, 2, 2, var_74, ""4, var_94, var_94, var_94) End If Next var_48 loc_004026BE: GoTo loc_0040267C End If loc_004026C0: var_9C = 1 loc_004026CA: var_A4 = 2 loc_004026D0: var_AC = &H13 For var_48 = "" To &H13 Step 1 loc_0040271B: var_9C = 1 loc_00402725: var_A4 = 2 If "" <> esi Then loc_00402746: var_64 = var_48 & var_A4 If @CLng("") >= 101 Then loc_00402758: call MSVBVM60.DLL.__vbaGenerateBoundsError("", 2, 2, var_A4, "", "", "", "", "") End If loc_0040275E: var_AC = 1 loc_00402781: var_74 = var_48 & 2 loc_00402784: var_74 = @CLng(%x2) If var_74 >= 101 Then loc_0040278D: call MSVBVM60.DLL.__vbaGenerateBoundsError End If loc_00402797: var_48 = @CLng(%x2) If var_48 >= 101 Then loc_004027A0: call MSVBVM60.DLL.__vbaGenerateBoundsError End If loc_004027A9: fild dword ptr [eax] loc_004027AB: fstp real8 ptr var_190 loc_004027B1: fild dword ptr [eax+edi*4] loc_004027B4: fstp real8 ptr var_198 loc_004027BA: fld real8 ptr var_190 If var_405000 = 0 Then loc_004027C9: fdiv real8 ptr var_198 loc_004027CF: GoTo loc_004027E2 End If loc_004027DD: call MSVBVM60.DLL._adj_fdiv_m64(var_198, var_194) loc_004027E2: 'Referenced from 004027CF loc_004027E2: fstsw ax If MSVBVM60.DLL._adj_fdiv_m64(var_198, var_194) = 0 Then loc_004027EC: call MSVBVM60.DLL.__vbaFpI4 Next var_48 loc_00402832: GoTo loc_00402719 End If loc_00402837: var_AC = &H28 loc_00402841: var_B4 = 2 loc_00402847: var_BC = &H14 loc_00402851: var_C4 = 2 For var_48 = &H14 To &H28 Step 1 If var_48 <> esi Then loc_0040288C: var_9C = &H14 loc_00402896: var_A4 = 2 loc_004028B1: call MSVBVM60.DLL.__vbaVarSub("", var_A4, var_48, "", ""8, var_C4, var_B4, var_A4, "") loc_004028BA: MSVBVM60.DLL.__vbaVarSub("", var_A4, var_48, "", ""8, var_C4, var_B4, var_A4, "") = @CLng(%x2) loc_004028BC: var_E0 = MSVBVM60.DLL.__vbaVarSub("", var_A4, var_48, "", ""8, var_C4, var_B4, var_A4, "") If MSVBVM60.DLL.__vbaVarSub("", var_A4, var_48, "", ""8, var_C4, var_B4, var_A4, "") >= 101 Then loc_004028C7: call MSVBVM60.DLL.__vbaGenerateBoundsError End If loc_004028CD: var_AC = &H13 loc_004028D7: var_B4 = 2 loc_004028F0: call MSVBVM60.DLL.__vbaVarSub(var_74, var_B4, var_48) loc_004028F3: MSVBVM60.DLL.__vbaVarSub(var_74, var_B4, var_48) = @CLng(%x2) If MSVBVM60.DLL.__vbaVarSub(var_74, var_B4, var_48) >= 101 Then loc_004028FC: call MSVBVM60.DLL.__vbaGenerateBoundsError End If loc_00402907: var_BC = 2 loc_0040290D: var_C4 = 2 loc_00402925: call MSVBVM60.DLL.__vbaVarSub(""4, var_C4, var_48) loc_00402928: MSVBVM60.DLL.__vbaVarSub(""4, var_C4, var_48) = @CLng(%x2) If MSVBVM60.DLL.__vbaVarSub(""4, var_C4, var_48) >= 101 Then loc_00402931: call MSVBVM60.DLL.__vbaGenerateBoundsError End If loc_0040293B: var_48 = @CLng(%x2) If var_48 >= 101 Then loc_00402944: call MSVBVM60.DLL.__vbaGenerateBoundsError End If loc_00402953: fild dword ptr [eax+edx*4] loc_00402956: fstp real8 ptr var_1A0 loc_0040295C: fild dword ptr [eax+edi*4] loc_0040295F: fstp real8 ptr var_1A8 loc_00402965: fld real8 ptr var_1A0 If var_405000 = 0 Then loc_00402974: fdiv real8 ptr var_1A8 loc_0040297A: GoTo loc_0040298D End If loc_00402988: call MSVBVM60.DLL._adj_fdiv_m64(var_1A8, var_1A4) loc_0040298D: 'Referenced from 0040297A loc_0040298D: fstsw ax If MSVBVM60.DLL._adj_fdiv_m64(var_1A8, var_1A4) = 0 Then loc_00402997: call MSVBVM60.DLL.__vbaFpI4 Next var_48 loc_004029CA: GoTo loc_00402884 End If loc_004029CF: var_9C = 1 loc_004029D9: var_A4 = 2 loc_004029DF: var_AC = &H64 loc_004029E9: var_B4 = 2 loc_004029F5: var_C4 = 2 For var_48 = "" To &H64 Step 1 If "" <> esi Then loc_00402A4D: var_50 = Text1.Text loc_00402A6F: var_48 = @CLng("") If var_48 >= 101 Then loc_00402A7C: call MSVBVM60.DLL.__vbaGenerateBoundsError("", arg_8, "", "", "", "", "", "", "") End If loc_00402A85: fild dword ptr [ecx+esi*4] loc_00402A88: fstp real8 ptr var_1B0 loc_00402A92: call MSVBVM60.DLL.__vbaR8Str(var_50) loc_00402A98: fcomp real8 ptr var_1B0 loc_00402A9E: fstsw ax If MSVBVM60.DLL.__vbaR8Str(var_50) <> 0 Then loc_00402AAA: GoTo loc_00402AAE End If loc_00402AAE: 'Referenced from 00402AAA loc_00402AC0: neg esi If esi <> 0 Then loc_00402ACA: var_4C = var_4C + 00000001h If Err.Number <> 0 Then GoTo loc_00402DA1 loc_00402AD3: var_4C = var_4C End If Next var_48 loc_00402AF3: GoTo loc_00402A28 End If loc_00402AF8: var_5C = 1 loc_00402B0C: fmul real4 ptr [0040116Ch] ; loc_00402B12: fstsw ax If Rnd(2) = 0 Then If CLng("") >= 101 Then loc_00402B29: call MSVBVM60.DLL.__vbaGenerateBoundsError End If If var_4C > esi Then loc_00402B51: var_8C = 80020004h loc_00402B62: var_7C = 80020004h loc_00402B6B: var_6C = 80020004h loc_00402B71: var_9C = "WRONG!!!" loc_00402B7B: var_A4 = 8 loc_00402BAB: MsgBox(10, esi, 10, ""4, 10) loc_00402BC7: GoTo loc_00402CCB End If If Not Asm.z_flag Then loc_00402BD7: var_8C = 80020004h loc_00402BE8: var_7C = 80020004h loc_00402BF1: var_6C = 80020004h loc_00402BF7: var_9C = "WRONG!!!" loc_00402C01: var_A4 = 8 loc_00402C31: MsgBox(10, esi, 10, ""4, 10) loc_00402C4D: GoTo loc_00402CCB loc_00402C54: var_8C = 80020004h loc_00402C65: var_7C = 80020004h loc_00402C6E: var_6C = 80020004h loc_00402C74: var_9C = "WRONG" loc_00402C7E: var_A4 = 8 loc_00402CAB: 'Referenced from 00402615 loc_00402CAF: MsgBox(10, 00000000h, 10, ""4, 10) loc_00402CCB: 'Referenced from 00402BC7 End If loc_00402CD6: call Exit Sub("", ""4, "", "") loc_00402CE2: GoTo loc_00402D18 loc_00402D17: Exit Sub loc_00402D18: 'Referenced from 00402CE2 loc_00402D6D: call MSVBVM60.DLL.__vbaAryDestruct(00000000h, var_34) loc_00402D7C: Exit Sub loc_00402D99: Exit Sub End If End If End If loc_00402D9C: GoTo loc_MSVBVM60.DLL.__vbaFPException loc_00402DA1: 'Referenced from 0402ACD loc_00402DA1: call MSVBVM60.DLL.__vbaErrorOverflow End Sub |
|
[求助]如何反汇编win32 控制台程序(类似dos程序)?
1.控制台程序加载时就有控制台窗口,是系统创建的,不是程序创建的。 2.用OD载入程序时,在弹出的 “打开”对话框的最下面有一栏“参数”,在其中填上需要的参数,比如你这个例子中的bbb.exe,再点打开,参数就可以正确地传递给程序。 3.向控制台输入信息的函数有很多,并且代表控制台的文件不仅可以是stdout,很有可能是stderr,下断点后不中断,很可能你没有中断在正确的位置,或者是因为你没有给程序传递参数,程序直接就退出了。如果“输出”不容易找突破,就从“输入”,即它读取文件的地方下断点。常用断点有kernel32的CreateFile以及msvcrt的_open、fopen等。 |
|
[求助]Microsoft Visual C++ 6.0 [Overlay]
你要编辑它的什么??? |
|
[已解]没壳了,VB的 老在里面跳,找不到密码,崩溃
老在VBVM60里面跳?应该是P-CODE的。 |
|
[求助]如何反汇编win32 控制台程序(类似dos程序)?
控制台程序一样使用WIN32的API,一样用OD调试。 至于断点,你必须明白只有当程序运行到断点处时才会触发调试器中断的,如果没有执行,当然不会有反应了。 比如,你在printf处下断点,那么只有当程序调用printf时才会中断,如果程序调用的是puts,那是不会中断的。 |
|
|
|
[转帖]OllyDbg常用快捷键
“CTRL + 上下左右”都好使,在未加载插件的情况下。所以应该是OD的内建功能。 |
|
|
|
[求助]请问游戏免CD属于破解吗?
光盘加密保护只是软件保护的一种形式而已。 软件保护并不是只有序列号、注册码、keyfile、加密狗等保护形式。 “免CD”只是一种习惯叫法而已,实际上还是去除软件的保护。 |
|
[转帖]OllyDbg常用快捷键
是CTRL+上、下吧??? |
|
[转帖]OllyDbg常用快捷键
按F3,在载入程序对话框的最下边,有参数一栏,在其中填入需要的参数。 |
|
|
|
[求助]怎样让DLL在OD里断下来
不管DLL,还是EXE,一旦载入了一个进程的地址空间,它们就是进程的一部分,代码和数据都一样,断点对于EXE和DLL来说没有区别。没断下来的原因只有一个,就是程序没有执行那一条语句,也就是说断点下得不合适。继续努力。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值