能力值:
( LV2,RANK:10 )
|
-
-
3 楼
插入代码 的确能实现的,以前做有些破解的时候,如插入一个对话框,弹出注册码就这么实现的。
不过我记得好像不是插入在00里面的,是插入在很多90的地方,汇编语言 90 90 为NOP,什么也不作的意思。而00是数据,应该不能弄掉吧。
要插入到哪个位置,你需要测试出来的,如利用窗体启动的信息,设置断点。
Grid1.Cols = 110
Grid1.Rows = 3000
的汇编代码,可以按楼上的思路,不过建议你可以在这个代码之前再加入
msgbox “OK”
这样反汇编的时候就能准确定位了。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
非常感谢指点!
我按你的方法:
Private Sub Command1_Click()
MsgBox "ok"
Grid1.Cols = 110
Grid1.Rows = 3000
End Sub
生成exe程序,反汇编得到Command1_Click的汇编代码:
00401E80 > \55 PUSH EBP
00401E81 . 8BEC MOV EBP,ESP
00401E83 . 83EC 0C SUB ESP,0C
00401E86 . 68 A6104000 PUSH <JMP.&MSVBVM60.__vbaExceptHandler> ; SE 处理程序安装
00401E8B . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00401E91 . 50 PUSH EAX
00401E92 . 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00401E99 . 81EC 8C000000 SUB ESP,8C
00401E9F . 53 PUSH EBX
00401EA0 . 56 PUSH ESI
00401EA1 . 57 PUSH EDI
00401EA2 . 8965 F4 MOV DWORD PTR SS:[EBP-C],ESP
00401EA5 . C745 F8 90104>MOV DWORD PTR SS:[EBP-8],工程3.00401090
00401EAC . 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
00401EAF . 8BC6 MOV EAX,ESI
00401EB1 . 83E0 01 AND EAX,1
00401EB4 . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00401EB7 . 83E6 FE AND ESI,FFFFFFFE
00401EBA . 56 PUSH ESI
00401EBB . 8975 08 MOV DWORD PTR SS:[EBP+8],ESI
00401EBE . 8B0E MOV ECX,DWORD PTR DS:[ESI]
00401EC0 . FF51 04 CALL DWORD PTR DS:[ECX+4]
00401EC3 . B9 04000280 MOV ECX,80020004
00401EC8 . 33FF XOR EDI,EDI
00401ECA . 894D B0 MOV DWORD PTR SS:[EBP-50],ECX
00401ECD . B8 0A000000 MOV EAX,0A
00401ED2 . 894D C0 MOV DWORD PTR SS:[EBP-40],ECX
00401ED5 . 894D D0 MOV DWORD PTR SS:[EBP-30],ECX
00401ED8 . 897D C8 MOV DWORD PTR SS:[EBP-38],EDI
00401EDB . 897D B8 MOV DWORD PTR SS:[EBP-48],EDI
00401EDE . 897D A8 MOV DWORD PTR SS:[EBP-58],EDI
00401EE1 . 897D 98 MOV DWORD PTR SS:[EBP-68],EDI
00401EE4 . 8D55 98 LEA EDX,DWORD PTR SS:[EBP-68]
00401EE7 . 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
00401EEA . 897D E8 MOV DWORD PTR SS:[EBP-18],EDI
00401EED . 897D D8 MOV DWORD PTR SS:[EBP-28],EDI
00401EF0 . 8945 A8 MOV DWORD PTR SS:[EBP-58],EAX
00401EF3 . 8945 B8 MOV DWORD PTR SS:[EBP-48],EAX
00401EF6 . 8945 C8 MOV DWORD PTR SS:[EBP-38],EAX
00401EF9 . C745 A0 EC1A4>MOV DWORD PTR SS:[EBP-60],工程3.00401AEC ; UNICODE "ok"
00401F00 . C745 98 08000>MOV DWORD PTR SS:[EBP-68],8
00401F07 . FF15 6C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarDu>; MSVBVM60.__vbaVarDup
00401F0D . 8D55 A8 LEA EDX,DWORD PTR SS:[EBP-58]
00401F10 . 8D45 B8 LEA EAX,DWORD PTR SS:[EBP-48]
00401F13 . 52 PUSH EDX
00401F14 . 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
00401F17 . 50 PUSH EAX
00401F18 . 51 PUSH ECX
00401F19 . 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
00401F1C . 57 PUSH EDI
00401F1D . 52 PUSH EDX
00401F1E . FF15 18104000 CALL DWORD PTR DS:[<&MSVBVM60.#595>] ; MSVBVM60.rtcMsgBox
00401F24 . 8D45 A8 LEA EAX,DWORD PTR SS:[EBP-58]
00401F27 . 8D4D B8 LEA ECX,DWORD PTR SS:[EBP-48]
00401F2A . 50 PUSH EAX
00401F2B . 8D55 C8 LEA EDX,DWORD PTR SS:[EBP-38]
00401F2E . 51 PUSH ECX
00401F2F . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00401F32 . 52 PUSH EDX
00401F33 . 50 PUSH EAX
00401F34 . 6A 04 PUSH 4
00401F36 . FF15 08104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
00401F3C . 83C4 04 ADD ESP,4
00401F3F . B9 03000000 MOV ECX,3
00401F44 . 8BD4 MOV EDX,ESP
00401F46 . 894D 98 MOV DWORD PTR SS:[EBP-68],ECX
00401F49 . B8 6E000000 MOV EAX,6E
00401F4E . 6A 05 PUSH 5
00401F50 . 890A MOV DWORD PTR DS:[EDX],ECX
00401F52 . 8B4D 9C MOV ECX,DWORD PTR SS:[EBP-64]
00401F55 . 8945 A0 MOV DWORD PTR SS:[EBP-60],EAX
00401F58 . 56 PUSH ESI
00401F59 . 894A 04 MOV DWORD PTR DS:[EDX+4],ECX
00401F5C . 8B0E MOV ECX,DWORD PTR DS:[ESI]
00401F5E . 8942 08 MOV DWORD PTR DS:[EDX+8],EAX
00401F61 . 8B45 A4 MOV EAX,DWORD PTR SS:[EBP-5C]
00401F64 . 8942 0C MOV DWORD PTR DS:[EDX+C],EAX
00401F67 . FF91 00030000 CALL DWORD PTR DS:[ECX+300]
00401F6D . 8B1D 1C104000 MOV EBX,DWORD PTR DS:[<&MSVBVM60.__vbaOb>; MSVBVM60.__vbaObjSet
00401F73 . 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
00401F76 . 50 PUSH EAX
00401F77 . 52 PUSH EDX
00401F78 . FFD3 CALL EBX ; <&MSVBVM60.__vbaObjSet>
00401F7A . 50 PUSH EAX
00401F7B . FF15 78104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLateI>; MSVBVM60.__vbaLateIdSt
00401F81 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401F84 . FF15 84104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj
00401F8A . B8 B80B0000 MOV EAX,0BB8
00401F8F . 8945 A0 MOV DWORD PTR SS:[EBP-60],EAX
00401F92 . 83EC 10 SUB ESP,10
00401F95 . B9 03000000 MOV ECX,3
00401F9A . 8BD4 MOV EDX,ESP
00401F9C . 894D 98 MOV DWORD PTR SS:[EBP-68],ECX
00401F9F . 6A 04 PUSH 4
00401FA1 . 56 PUSH ESI
00401FA2 . 890A MOV DWORD PTR DS:[EDX],ECX
00401FA4 . 8B4D 9C MOV ECX,DWORD PTR SS:[EBP-64]
00401FA7 . 894A 04 MOV DWORD PTR DS:[EDX+4],ECX
00401FAA . 8B0E MOV ECX,DWORD PTR DS:[ESI]
00401FAC . 8942 08 MOV DWORD PTR DS:[EDX+8],EAX
00401FAF . 8B45 A4 MOV EAX,DWORD PTR SS:[EBP-5C]
00401FB2 . 8942 0C MOV DWORD PTR DS:[EDX+C],EAX
00401FB5 . FF91 00030000 CALL DWORD PTR DS:[ECX+300]
00401FBB . 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
00401FBE . 50 PUSH EAX
00401FBF . 52 PUSH EDX
00401FC0 . FFD3 CALL EBX
00401FC2 . 50 PUSH EAX
00401FC3 . FF15 78104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLateI>; MSVBVM60.__vbaLateIdSt
00401FC9 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401FCC . FF15 84104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj
00401FD2 . 897D FC MOV DWORD PTR SS:[EBP-4],EDI
00401FD5 . 68 02204000 PUSH 工程3.00402002
00401FDA . EB 25 JMP SHORT 工程3.00402001
00401FDC . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401FDF . FF15 84104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj
00401FE5 . 8D45 A8 LEA EAX,DWORD PTR SS:[EBP-58]
00401FE8 . 8D4D B8 LEA ECX,DWORD PTR SS:[EBP-48]
00401FEB . 50 PUSH EAX
00401FEC . 8D55 C8 LEA EDX,DWORD PTR SS:[EBP-38]
00401FEF . 51 PUSH ECX
00401FF0 . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00401FF3 . 52 PUSH EDX
00401FF4 . 50 PUSH EAX
00401FF5 . 6A 04 PUSH 4
00401FF7 . FF15 08104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
00401FFD . 83C4 14 ADD ESP,14
00402000 . C3 RETN
00402001 > C3 RETN ; RET 被用作一个跳转到 00402002
00402002 > 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00402005 . 50 PUSH EAX
00402006 . 8B08 MOV ECX,DWORD PTR DS:[EAX]
00402008 . FF51 08 CALL DWORD PTR DS:[ECX+8]
0040200B . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0040200E . 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
00402011 . 5F POP EDI
00402012 . 5E POP ESI
00402013 . 64:890D 00000>MOV DWORD PTR FS:[0],ECX
0040201A . 5B POP EBX
0040201B . 8BE5 MOV ESP,EBP
0040201D . 5D POP EBP
0040201E . C2 0400 RETN 4
请问我需要的是哪段代码,如何修改?是否还要找到Grid1的控件ID?
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
哈哈哈,太感谢了,修改非常成功!
修改方法如下:
内存中的偏移
00468117 /E9 E4160800 jmp Crackm3.004E9800 ;在468117跳转到文件的末尾
0046811C |90 nop
0046811D |90 nop
文件末尾写入了如下代码
004E9800 60 pushad
004E9801 6A 00 push 0x0
004E9803 6A 6E push 0x6E
004E9805 90 nop
004E9806 90 nop
004E9807 90 nop
004E9808 6A 00 push 0x0
004E980A 6A 03 push 0x3
004E980C 6A 05 push 0x5
004E980E 50 push eax
004E980F FF15 08124000 call dword ptr ds:[<&MSVBVM60.__vbaLateIdSt>] ; MSVBVM60.__vbaLateIdSt
004E9815 90 nop
004E9816 90 nop
004E9817 90 nop
004E9818 90 nop
004E9819 90 nop
004E981A 90 nop
004E981B 90 nop
004E981C 61 popad
004E981D 60 pushad
004E981E 6A 00 push 0x0
004E9820 68 B80B0000 push 0xBB8
004E9825 90 nop
004E9826 90 nop
004E9827 6A 00 push 0x0
004E9829 6A 03 push 0x3
004E982B 6A 04 push 0x4
004E982D 50 push eax
004E982E FF15 08124000 call dword ptr ds:[<&MSVBVM60.__vbaLateIdSt>] ; MSVBVM60.__vbaLateIdSt
004E9834 90 nop
004E9835 90 nop
004E9836 90 nop
004E9837 90 nop
004E9838 90 nop
004E9839 61 popad
004E983A C745 FC 0A000000 mov dword ptr ss:[ebp-0x4],0xA
004E9841 ^ E9 D8E8F7FF jmp Crackm3.0046811E
授人以鱼,不如授人以渔!还请教兄弟几个疑惑:
1、为什么选中00468117 为插入点?什么类型的地方作为插入点不影响程序原功能?
00468117这个点在“导入模板”选择“取消”时也会更改表格行数和列数,我想插入点在“打开”数据以后就更完美了!
2、重点:文件末尾写入的代码是怎么得来的?怎么知道是哪几个汇编变量?
比如这里
004E9808 6A 00 push 0x0
004E980A 6A 03 push 0x3
004E980C 6A 05 push 0x5
004E980E 50 push eax
004E980F FF15 08124000 call dword ptr ds:[<&MSVBVM60.__vbaLateIdSt>] ; MSVBVM60.__vbaLateIdSt
加那么多nop是起什么作用的?call dword ptr ds:[<&MSVBVM60.__vbaLateIdSt>] 又是起什么作用?
3、这个CALL的重定位又该如何做啊?
4、代码不多,还麻烦兄弟对整个代码作个注释,详细解说一下方法,也好知其所以然。指望把这当作pediy的入门教程了!小弟基本是个汇编盲,实在
|
能力值:
( LV13,RANK:240 )
|
-
-
16 楼
1 为什么选中00468117 为插入点主要是为了获得GRID这个表对象指针,其实也可以往下找插入点,这里执行完上面一个CALL以后得到的EAX就是 表指针, 其次 任何类型的地址都可以作为插入点,只要保存好寄存器的值,HOOK后再修改回来。
2 4一起回答了吧 nop是调试的时候为了保证有足够多的空间写我的代码,没实际意义。
为何是这些参数,我是自己写了一个GRID表格操作,看相同的部分是什么。
比如要设置行还有列,需要调用函数 m_grid.SetCols(110),m_grid.setrows(3000),m_grid就是1中获得的EAX, 其实VB和VC都是自己实现了一个类来操作GRID,参数都是自己比照VC和你的程序分析出来的。
004E9800 60 pushad 保护现场寄存器
004E9801 6A 00 push 0x0 固定参数null
004E9803 6A 6E push 0x6E 新的列的值 110
004E9805 90 nop nop可以无视,调试需要
004E9806 90 nop
004E9807 90 nop
004E9808 6A 00 push 0x0 参数null
004E980A 6A 03 push 0x3 设置行或者列的固定参数
004E980C 6A 05 push 0x5 表示设置列 这里参数为5
004E980E 50 push eax grid指针
004E980F FF15 08124000 call dword ptr ds:[<&MSVBVM60.__vbaLateIdSt>] ; MSVBVM60.__vbaLateIdSt
004E9815 90 nop
004E9816 90 nop
004E9817 90 nop
004E9818 90 nop
004E9819 90 nop
004E981A 90 nop
004E981B 90 nop
004E981C 61 popad 恢复现场
004E981D 60 pushad 再保存现场
004E981E 6A 00 push 0x0 固定参数0
004E9820 68 B80B0000 push 0xBB8 新的行的值 3000
004E9825 90 nop
004E9826 90 nop
004E9827 6A 00 push 0x0 固定参数0
004E9829 6A 03 push 0x3 表示设置行列的固定参数3
004E982B 6A 04 push 0x4 表示设置行 参数为4
004E982D 50 push eax 指针
004E982E FF15 08124000 call dword ptr ds:[<&MSVBVM60.__vbaLateIdSt>] ; MSVBVM60.__vbaLateIdSt
004E9834 90 nop
004E9835 90 nop
004E9836 90 nop
004E9837 90 nop
004E9838 90 nop
004E9839 61 popad 恢复现场
004E983A C745 FC 0A000000 mov dword ptr ss:[ebp-0x4],0xA 执行之前HOOK地址的代码 00468117。
004E9841 ^ E9 D8E8F7FF jmp Crackm3.0046811E跳回去 m_grid.SetCols(110) 其实最终调用到OCX文件里面的代码 类似于 调用函数 MSVBVM60.__vbaLateIdSt(表指针eax ,设置的是行 4 还是列 5,要设置的属性是行列属性 3,NULL,新的行或者列的大小,NULL);
主要是参数分析一下。其他的说说也难以说明白。自己慢慢理解吧
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
现在我又有了新问题,再次请教了,请高手多多指点!
上次是固定的行数插入,这次我想修改为根据导入数据行数动态设置GIRD1表的行数。我跟踪调试之后在00468541或者00468550中断时,[EBP-4C]堆栈地址指向的SS段[12EE94]即为导入的数据行数,再加上4即为需要的表格行数。于是我按IamHuskar兄弟给的代码修改如下:
00468541 /E9 BA120800 JMP Crackm1.004E9800
00468546 |90 NOP
00468547 |90 NOP
004E9800 60 PUSHAD
004E9801 6A 00 PUSH 0
004E9803 8B55 B4 MOV EDX,DWORD PTR SS:[EBP-4C] ; EDX=0x1A //SS段[12EE94]
004E9806 83C2 04 ADD EDX,4
004E9809 52 PUSH EDX
004E980A 6A 00 PUSH 0
004E980C 6A 03 PUSH 3
004E980E 6A 04 PUSH 4
004E9810 8B85 00FFFFFF MOV EAX,DWORD PTR SS:[EBP-100]
004E9816 50 PUSH EAX
004E9817 FF15 08124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLateI>
004E981D 61 POPAD
004E981E C745 FC 22000>MOV DWORD PTR SS:[EBP-4],22
004E9825 ^ E9 1EEDF7FF JMP Crackm1.00468548
其中EDX能得到需要的正确行数,但运行结果却是后一次的只在前一次的表格行数上加了4行,是不是EDX变量压入的方式不对?
还请各位大哥帮忙指正修改一下,多谢了!
|