jony413

多媒体信息发布、排队叫号、医院分诊、电子班牌

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
大概就写这么点吧。对于一些新手已经够了。其他比较深的我如果来讲的话可能讲的不是很好也不是很正确。。多看一些别人的教程吧。估计,看完这些东西一般的crackerme和软件应该就是手到擒来了。因此,我就不多写了 给论坛节省资源。
                   顺便晒下偶像。Cracker中偶像是fly    传闻抱得美人归后就隐退了。。Cracker界的一个损失
                                             Hacker小榕。在我看来小榕是一个比较纯粹的Hacker  没有转型商业性质的。传闻在上海开了一家房地产公司   06年的事情了 如今如何 我就不得而知了 如果 有知道的请告知我哈。。也是与小鸟一起隐退的。
求加精被H牛否了。。。喂喂喂。好歹我不是搬运工。。。 好多也是自己写的。。。

              这不科学.H牛那天路过海淀一定要M你 让你请我吃饭



谢谢  我是分期写 请不要回复 不然会造成阅读不方便。谢谢大家(如果想跟帖请按点评 字节不要太多。会看不到。。)
    首先,要学习cracker。假如你要深入的学习请按照我说的步骤。假如只是要学习爆破什么的。请按右上角。。因为,别的文章比我字数更少更简洁
      我只是说我学习的方法,如有不对的地方请指教。    我会在文章中插一些我认为很好的文章希望大家可以阅读下。比我这种半路出家的写的要好。欢迎指点。
         我最早接触的cracker教程是黑基2005年左右做的一个汇编教学。以下是总结的一些东西。以后你会遇到。方便学习深入分析算法和分析行为。先说下各个操作指令。

            

[AppleScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
8080汇编手册数据传输指令
──────────────────────────────
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。
1。 通用数据传送指令。
MOV 传送字或字节。
MOVSX 先符号扩展,再传送。
MOVZX 先零扩展,再传送。
PUSH 把字压入堆栈。
POP 把字弹出堆栈。
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈。
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈。
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈。
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈。
BSWAP 交换32位寄存器里字节的顺序
XCHG 交换字或字节。( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG 比较并交换操作数。( 第二个操作数必须为累加器AL/AX/EAX )
XADD 先交换再累加。( 结果在第一个操作数里 )
XLAT 字节查表转换。
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即
0-FFH); 返回 AL 为查表结果。 ( [BX+AL]->AL )
2。 输入输出端口传送指令。
IN I/O端口输入。 ( 语法: IN 累加器, {端口号│DX} )
OUT I/O端口输出。 ( 语法: OUT {端口号│DX},累加器 )
输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,
其范围是 0-65535
3。 目的地址传送指令。
LEA 装入有效地址。
: LEA DX,string ;把偏移地址存到DX。
LDS 传送目标指针,把指针内容装入DS。
: LDS SI,string ;把段地址:偏移地址存到DS:SI。
LES 传送目标指针,把指针内容装入ES。
: LES DI,string ;把段地址:偏移地址存到ES:DI。
LFS 传送目标指针,把指针内容装入FS。
: LFS DI,string ;把段地址:偏移地址存到FS:DI。
LGS 传送目标指针,把指针内容装入GS。
: LGS DI,string ;把段地址:偏移地址存到GS:DI。
LSS 传送目标指针,把指针内容装入SS。
: LSS DI,string ;把段地址:偏移地址存到SS:DI。
4。 标志传送指令。
LAHF 标志寄存器传送,把标志装入AH。
SAHF 标志寄存器传送,把AH内容装入标志寄存器。
PUSHF 标志入栈。
POPF 标志出栈。
PUSHD 32位标志入栈。
POPD 32位标志出栈。
二、算术运算指令
──────────────────────────────
ADD 加法。
ADC 带进位加法。
INC 加 1
AAA 加法的ASCII码调整。
DAA 加法的十进制调整。
SUB 减法。
SBB 带借位减法。
DEC 减 1
NEC 求反(0 减之)
CMP 比较。(两操作数作减法,仅修改标志位,不回送结果)
AAS 减法的ASCII码调整。
DAS 减法的十进制调整。
MUL 无符号乘法。
IMUL 整数乘法。
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算)
AAM 乘法的ASCII码调整。
DIV 无符号除法。
IDIV 整数除法。
以上两条,结果回送:
商回送AL,余数回送AH, (字节运算);
或 商回送AX,余数回送DX, (字运算)
AAD 除法的ASCII码调整。
CBW 字节转换为字。 (把AL中字节的符号扩展到AH中去)
CWD 字转换为双字。 (把AX中的字的符号扩展到DX中去)
CWDE 字转换为双字。 (把AX中的字符号扩展到EAX中去)
CDQ 双字扩展。 (把EAX中的字的符号扩展到EDX中去)
三、逻辑运算指令
────────────────────────────
AND 与运算。
OR 或运算。
XOR 异或运算。
NOT 取反。
TEST 测试。(两操作数作与运算,仅修改标志位,不回送结果)
SHL 逻辑左移。
SAL 算术左移。(=SHL)
SHR 逻辑右移。
SAR 算术右移。(=SHR)
ROL 循环左移。
ROR 循环右移。
RCL 通过进位的循环左移。
RCR 通过进位的循环右移。
以上八种移位指令,其移位次数可达255次。
移位一次时, 可直接用操作码。 如 SHL AX,1
移位>1次时, 则由寄存器CL给出移位次数。
如 MOV CL,04
SHL AX,CL
四、串指令
───────────────────────────
DS:SI 源串段寄存器 :源串变址。
ES:DI 目标串段寄存器:目标串变址。
CX 重复次数计数器。
AL/AX 扫描值。
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量。
Z标志 用来控制扫描或比较操作的结束。
MOVS 串传送。
( MOVSB 传送字符。 MOVSW 传送字。 MOVSD 传送双字。 )
CMPS 串比较。
( CMPSB 比较字符。 CMPSW 比较字。 )
SCAS 串扫描。
把AL或AX的内容与目标串作比较,比较结果反映在标志位。
LODS 装入串。
把源串中的元素(字或字节)逐一装入AL或AX中。
( LODSB 传送字符。 LODSW 传送字。 LODSD 传送双字。 )
STOS 保存串。
是LODS的逆过程。
REP 当CX/ECX<>0时重复。
REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复。
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复。
REPC 当CF=1且CX/ECX<>0时重复。
REPNC 当CF=0且CX/ECX<>0时重复。
五、程序转移指令
──────────────────────────
1>无条件转移指令 (长转移)
JMP 无条件转移指令
CALL 过程调用
RET/RETF过程返回。
2>条件转移指令 (短转移,-128+127的距离内)
( 当且仅当(SF XOR OF)=1时,OP1 JA/JNBE 不小于或不等于时转移。
JAE/JNB 大于或等于转移。
JB/JNAE 小于转移。
JBE/JNA 小于或等于转移。
以上四条,测试无符号整数运算的结果(标志C和Z)
JG/JNLE 大于转移。
JGE/JNL 大于或等于转移。
JL/JNGE 小于转移。
JLE/JNG 小于或等于转移。
以上四条,测试带符号整数运算的结果(标志S,O和Z)
JE/JZ 等于转移。
JNE/JNZ 不等于时转移。
JC 有进位时转移。
JNC 无进位时转移。
JNO 不溢出时转移。
JNP/JPO 奇偶性为奇数时转移。
JNS 符号位为 "0" 时转移。
JO 溢出转移。
JP/JPE 奇偶性为偶数时转移。
JS 符号位为 "1" 时转移。
3>循环控制指令(短转移)
LOOP CX不为零时循环。
LOOPE/LOOPZ CX不为零且标志Z=1时循环。
LOOPNE/LOOPNZ CX不为零且标志Z=0时循环。
JCXZ CX为零时转移。
JECXZ ECX为零时转移。
4>中断指令
INT 中断指令
INTO 溢出中断
IRET 中断返回
5>处理器控制指令
HLT 处理器暂停, 直到出现中断或复位信号才继续。
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态。
ESC 转换到外处理器。
LOCK 封锁总线。
NOP 空操作。
STC 置进位标志位。
CLC 清进位标志位。
CMC 进位标志取反。
STD 置方向标志位。
CLD 清方向标志位。
STI 置中断允许位。
CLI 清中断允许位。
六、伪指令
───────────────────────────
DW 定义字(2字节)
PROC 定义过程。
ENDP 过程结束。
SEGMENT 定义段。
ASSUME 建立段寄存器寻址。
ENDS 段结束。
END 程序结束。
 
一.机械码,又称机器码.
ultraedit打开,编辑exe文件时你会看到
许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码
就是机器码.
修改程序时必须通过修改机器码来修改exe文件.
 
二.需要熟练掌握的全部汇编知识(只有这么多)
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了
cmp a,b 比较a与b
mov a,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je 或jz 若相等则跳(机器码74 0F84)
jne或jnz 若不相等则跳(机器码750F85)
jmp 无条件跳(机器码EB)
jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
 
三.常见修改(机器码)
74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB
 
jnz->nop
75->90(相应的机器码修改)
 
jnz -> jmp
75 -> EB(相应的机器码修改)
 
jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改)
 
四.两种不同情况的不同修改方法
1.修改为jmp
je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
 
xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" "Command Not Avaible" "Can't save in Shareware/Demo"等 (我们希望把它跳过,不让它出现)
。。。
。。。
xxxxxxxxxxxx 正确路线所在
 
2.修改为nop
je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处
 
xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
。。。
。。。
xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
1. 通用数据传送指令.
MOV 传送字或字节.
MOVSX 先符号扩展,再传送.
MOVZX 先零扩展,再传送.
PUSH 把字压入堆栈.
POP 把字弹出堆栈.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
BSWAP 交换32位寄存器里字节的顺序
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
XADD 先交换再累加.( 结果在第一个操作数里 )
XLAT 字节查表转换.
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,
0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
2. 输入输出端口传送指令.
IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )
输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,
其范围是 0-65535.
3. 目的地址传送指令.
LEA 装入有效地址.
: LEA DX,string ;把偏移地址存到DX.
LDS 传送目标指针,把指针内容装入DS.
: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES 传送目标指针,把指针内容装入ES.
: LES DI,string ;把段地址:偏移地址存到ESI.
LFS 传送目标指针,把指针内容装入FS.
: LFS DI,string ;把段地址:偏移地址存到FSI.
LGS 传送目标指针,把指针内容装入GS.
: LGS DI,string ;把段地址:偏移地址存到GSI.
LSS 传送目标指针,把指针内容装入SS.
: LSS DI,string ;把段地址:偏移地址存到SSI.
4. 标志传送指令.
LAHF 标志寄存器传送,把标志装入AH.
SAHF 标志寄存器传送,把AH内容装入标志寄存器.
PUSHF 标志入栈.
POPF 标志出栈.
PUSHD 32位标志入栈.
POPD 32位标志出栈.
 
二、算术运算指令
───────────────────────────────────────
ADD 加法.
ADC 带进位加法.
INC 加 1.
AAA 加法的ASCII码调整.
DAA 加法的十进制调整.
SUB 减法.
SBB 带借位减法.
DEC 减 1.
NEC 求反(0 减之).
CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).
AAS 减法的ASCII码调整.
DAS 减法的十进制调整.
MUL 无符号乘法.
IMUL 整数乘法.
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
AAM 乘法的ASCII码调整.
DIV 无符号除法.
IDIV 整数除法.
以上两条,结果回送:
商回送AL,余数回送AH, (字节运算);
或 商回送AX,余数回送DX, (字运算).
AAD 除法的ASCII码调整.
CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)
CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)
CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)
CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)
 
三、逻辑运算指令
───────────────────────────────────────
AND 与运算.
OR 或运算.
XOR 异或运算.
NOT 取反.
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL 逻辑左移.
SAL 算术左移.(=SHL)
SHR 逻辑右移.
SAR 算术右移.(=SHR)
ROL 循环左移.
ROR 循环右移.
RCL 通过进位的循环左移.
RCR 通过进位的循环右移.
以上八种移位指令,其移位次数可达255次.
移位一次时, 可直接用操作码. 如 SHL AX,1.
移位>1次时, 则由寄存器CL给出移位次数.
如 MOV CL,04
SHL AX,CL
 
四、串指令
───────────────────────────────────────
DS:SI 源串段寄存器 :源串变址.
ESI 目标串段寄存器:目标串变址.
CX 重复次数计数器.
AL/AX 扫描值.
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
Z标志 用来控制扫描或比较操作的结束.
MOVS 串传送.
( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )
CMPS 串比较.
( CMPSB 比较字符. CMPSW 比较字. )
SCAS 串扫描.
把AL或AX的内容与目标串作比较,比较结果反映在标志位.
LODS 装入串.
把源串中的元素(字或字节)逐一装入AL或AX中.
( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )
STOS 保存串.
是LODS的逆过程.
REP 当CX/ECX<>0时重复.
REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
REPC 当CF=1且CX/ECX<>0时重复.
REPNC 当CF=0且CX/ECX<>0时重复.
 
五、程序转移指令
───────────────────────────────────────
1>无条件转移指令 (长转移)
JMP 无条件转移指令
CALL 过程调用
RET/RETF过程返回.
2>条件转移指令 (短转移,-128+127的距离内)
( 当且仅当(SF XOR OF)=1,OP1<OP2 )
JA/JNBE 不小于或不等于时转移.
JAE/JNB 大于或等于转移.
JB/JNAE 小于转移.
JBE/JNA 小于或等于转移.
以上四条,测试无符号整数运算的结果(标志C和Z).
JG/JNLE 大于转移.
JGE/JNL 大于或等于转移.
JL/JNGE 小于转移.
JLE/JNG 小于或等于转移.
以上四条,测试带符号整数运算的结果(标志S,O和Z).
JE/JZ 等于转移.
JNE/JNZ 不等于时转移.
JC 有进位时转移.
JNC 无进位时转移.
JNO 不溢出时转移.
JNP/JPO 奇偶性为奇数时转移.
JNS 符号位为 "0" 时转移.
JO 溢出转移.
JP/JPE 奇偶性为偶数时转移.
JS 符号位为 "1" 时转移.
3>循环控制指令(短转移)
LOOP CX不为零时循环.
LOOPE/LOOPZ CX不为零且标志Z=1时循环.
LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
JCXZ CX为零时转移.
JECXZ ECX为零时转移.
4>中断指令
INT 中断指令
INTO 溢出中断
IRET 中断返回
5>处理器控制指令
HLT 处理器暂停, 直到出现中断或复位信号才继续.
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
ESC 转换到外处理器.
LOCK 封锁总线.
NOP 空操作.
STC 置进位标志位.
CLC 清进位标志位.
CMC 进位标志取反.
STD 置方向标志位.
CLD 清方向标志位.
STI 置中断允许位.
CLI 清中断允许位.
 
六、伪指令
───────────────────────────────────────
DW 定义字(2字节).
PROC 定义过程.
ENDP 过程结束.
SEGMENT 定义段.
ASSUME 建立段寄存器寻址.
ENDS 段结束.
END 程序结束

本人当时打印了7页去背。。。貌似现在都忘记了。。 
如果只是想大致的学习一下的话那么就直接背跳转和修改方法吧。没多少、、、


当我背完以上的东西的时候。已经可以爆破一些简单的验证了。(@bambooqj【1】 ‘这只是个表情我会在文章最后打包一些程序。)   你也可以下载一些简单的crackerme去分析。
    当然关于简单的爆破可能有的朋友会说。不知道按钮事件和关键字如何能爆破。那么下面就是我要说的了。

         首先,什么是爆破?爆破就是爆力破解,在破解软件的时候直接跳过软件的注册入口点。。然后,修改算法或直接jmp亦或是nop算法call,之后不论输入什么注册信息都会注册成功!
                文章有些可能是我从网上摘抄来的希望作者看到不会骂我。哈,但是,我学习就是这么来的。。。。。。如果,有侵权行为我会立马删掉文章并道歉。
                         下面介绍一些找爆破点的方法。


[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
先介绍简单的就是有消息框的。
1.函数断点法
如直接OD下断点 bp MessageBoxA  当然这个只是一个函数。举个例子而已。后边会有一个专门的总结方便下断点。
2.F12堆栈回溯法(F12暂停法)
1)F12堆栈回溯法
当出现提示框时在OD按下F12暂停程序。然后点击工具栏的 “K”  或者   查看---调用堆栈---找到最接近入口的地址如401C22
回车找到该代码“push ebp” 十六进制“55
 
2)F12暂停法【这个才是真正地F12暂停法】
1 od 下运行程序,F12 暂停;
2 View菜单中选击Windows项,在打开的窗口中可以从Title栏看到目标按钮,从而找到它的Handle(xxxxxxxx) ;
 
对不同平台生成的程序,分别处理:
 
一、VB, Delphi, CBuilder 程序:
3 在CallWindowProcA入口下条件断点: [esp+8]==xxxxxxxx && [esp+0c]==202
4 F9继续程序,点击目标按钮,程序中断;
5 Alt+F4,在代码段(.text)上下访问断点;
6 F9执行程序,程序中断,
   1). VB程序中断在下面代码
     PUSH DWORD PTR DS:[EAX+EBX]              ; yyyyyyy
     上面[EAX+EBX]的值(yyyyyy)就是我们要找的位置。
 
   2). Delphi, CBuilder 的程序
     程序直接断在我们要找的位置。
 
借moon一句,这姑妄称作CallWindowProcA条件断点加上code段内存断点法吧。
 
二、VC程序
又分MFC和Win32两种情况,二者相同之处:
3 在IsDialogMessageW入口下条件断点: [[esp+8]]==xxxxxxxx && [[esp+8]+4]==202
4 F9继续程序,点击目标按钮,程序中断;
5 Alt+F4,在代码段上下访问断点;
6 F9执行程序,程序中断, 注意这里虽然中断在code段,但却不是处理Button点击事件的代码处
  这时:
  对Win32程序,只需要按几下F7,当回到User32.dll领空后再重复一次第 56步就可以了;
  而对于MFC程序,我们不得不多次重复这样的操作:单步回到MFC领空,再第 56步。好在已经看到大陆啦!
 
类比,这就叫IsDialogMessageW条件断点加上code段内存断点法了
 
3.关键字符串法
无插件(反汇编窗口右键---查找---所有参考字符串文本【可能翻译不一样大概就是这样吧】)
有插件(插件---中文搜索---查找U码【unicode】(查找A码【ascii】)
然后ctrl+f 查找你要的关键字  然后回车  找到“push ebp”  也就是十六进制的“55”  事件头下断点
4.按钮事件法
要熟悉各个语言的按钮事件以下是我总结的
1)Delphi和BC++程序
OD载入后,CTRL+G,转到00401000
然后就CTRL+B,查找特征码740E8BD38B83????????FF93????????
然后就在下面的CALL处下断吧.
下面的工作就是不断的CTRL+L继续查找和F2下断了.
2)VB程序
OD载入后,CTRL+B,816C24
然后,就在下面的JMP处F2下断,下完后CTRL+L,如果还有,就继续下断点.
下完断点后,运行程序,点击相应的按纽,OD就会断下来了
3)易语言
1.老版本的易语言】OD载入后,就F9运行程序吧,当程序运行后,ALT+E
选中易语言的核心库krnln,双击进去
  
然后CTRL+B,查找FF 55 FC
2.新版本的易语言】OD载入后,CTRL+G,转到00401000
然后就CTRL+B,查找特征码:FF 55 FC 5F 5E 89 5D F4


可能不太全有时间补齐吧。顺便推荐两篇我初学时候的文章 有些东西就是从这里复制的
http://hi.baidu.com/taoist/item/a35e20320922d6c91b9696d8      ‘按钮事件查找与应用
http://www.52pojie.cn/forum.php?mod=viewthread&tid=125362    ’黑鹰基地教程的总结 可以先看这个。比我讲的要系统。我毕竟怎么学的都忘得差不多了。文章先后可能有点问题写完后我再修改         
http://hi.baidu.com/bambooqj/item/3e589cdc8504cd10d78ed0bb  ‘天草还是黑鹰的忘记了 也是一个总结    

关于壳。这个章节我可能会写的比较多。可乐说我算违规了。。求不删帖计次违规。。   
首先讲下
一、壳的工作原理与脱壳的大致过程
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
1)Entry Point (入口点)
 
PE格式的可执行文件的执行时的入口点,即是PE格式中的Entry Point。
 
用PEditor或者LordPE之类的PE查看工具看看NotePad.exe,你就会看到Entry Point的值。
 
也就是说NotePad.exe在执行时的第一行代码的地址应该就是这个值。(当然应该加上基地址)
 
2)Section (节区)
 
PE格式文件是按节区进行规划组织的,不同的节区一般保存的数据的作用也不相同。通常使用缺省方式编译的程序文件,有CODE/DATA/TLS/.text/.data/.tls/.rsrc/.rdata/.edata/.reloc等不同的名称,有的用于保存程序代码,如CODE和.text节区,有的用于保存程序中的变量的,如DATA/.data节区,有的保存重定位信息,如.reloc,有的用于保存资源数据,如.rsrc。等等等等,当然这是缺省情况下编译器产生的结构。
 
而节区名称和节区中的数据其实没有必然的联系,节区中保存的数据也没有什么硬性的限制。所以你可以在编译时用开关参数改变这些情况。
 
3)ImageBase (基地址)
 
不仅程序文件按节区规划,而且程序文件在运行时Windows系统也是按节区加载的。那么每一块的节区的顺序如何?起始的地址是什么呢?
 
这就由基地址决定。在程序的文件头部保存了每个节区的描述信息,比如有前面提到的节区名称,还有节区的大小,以及节区的相对虚拟地址(RVA)
 
如果我们把节区的相对虚拟地址(RVA)加上基地址(ImageBase)就可以知道节区在内存中的虚拟地址(VA)了。Windows系统就是按照这个要求来加载各个节区的。这样Windows系统依次把各个节区放到了它相应的虚拟地址空间。
 
所以如果我们把相对虚拟地址(RVA)看成是坐标的偏移量的话,那么ImageBase就是原点了。有了这个原点,一切都简单了。
 
好了有了简要的介绍,我们来看看壳的加载过程吧。注意这里说的是一般情况,不特指某个壳,如果那样的话,我想那大概是洋洋洒洒几万字的了,好象我没有写过这么长的。虽然我的五笔练得还不错。
 
1)获取壳自己所需要使用的API地址
 
如果你用PE查看工具看看加壳后的程序文件,会发现未加壳的程序文件和加壳后的程序文件的Import Table不太一样,加壳后的Import Table一般所引入的DLL和API很少,甚至只有Kernel32.dll以及GetProcAddress这个API。
 
我想你不会认为壳只用这个API就可以做所有的事吧。壳还需要很多其他的API来完成它的工作。当然他并不想让你知道他想用哪个API,所以一般他只是在壳的代码中动态加载这些API,而只把一些你嗅不过什么味道的几个API放在Import Table中。当然这其中壳可能会用到一些Anti技术,不过这和本文主旨无关,所以就不说了。
 
2)解密原程序的各个节区(Section)的数据
 
壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个节区。既然是加密保存,那么在程序执行时你总不能也保持加密状态吧,所以解密是壳必做的工作之一。一般壳按节区加密的,那么在解密时也按节区解密,并且把解密的节区数据按照节区的定义放在合适的内存位置。
 
如果加壳时用到了压缩技术,那么在解密之前还有一道工序,当然是解压缩。这也是一些壳的特色之一,比如说原来的程序文件未加壳时1-2M大小,加壳后反而只有几百K,这种瘦身技术当然会吸引了不少眼球。
 
3)重定位
 
前面我们提到了ImageBase,即程序的基地址,当然这只是程序文件中声明的,程序运行时能够保证系统一定满足你的要求吗?
 
对于EXE的程序文件来说,Windows系统会尽量满足你的要求。
 
比如一般EXE文件的基地址为0x400000,而运行时Windows系统提供给程序的基地址也同样是0x400000。在这种情况下就不需要进行地址"重定位"了。
 
由于不需要对EXE文件进行"重定位",所以很多壳在加壳时把原程序文件中用于保存重定位信息的节区干脆也去掉了,这样使得加壳后的文件更加小巧。有些工具提供Wipe Reloc的功能,其实就是这个作用。
 
不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。这样"重定位"就很重要了。
 
此时壳中也需要提供进行"重定位"的代码,否则原程序中的代码是无法正常运行起来的。从这点来说,加壳的DLL比加壳的EXE更难修正。
 
4)HOOK-API
 
我们知道程序文件中的Import Table的作用是让Windows系统在程序运行时提供API的实际地址给程序使用。在程序的第一行代码执行之前,Windows系统就完成了这个工作。
 
而壳一般都修改了原程序文件的Import Table,那么原程序文件的Import Table由谁来处理呢?这当然由壳来自己处理了,因此壳不得不模仿Windows系统的工作来填充Import Table中相关的数据。
 
Import Table结构中与实际运行相关的主要是IAT结构,这个结构中用于保存API的实际地址,因此壳所需要的就是填充这个结构中的数据。
 
不过壳不是填充这些实际的API地址,而是填充壳中用来HOOK-API的代码的地址。
 
这样壳中的代码一旦完成了加载工作,在进入原程序的代码之后,仍然能够间接地获得程序的控制权。
 
因为程序总是需要与系统打交道,与系统交道的途径是API,而API的地址已经替换成了壳的HOOK-API的地址,那么每一次程序与系统打交道,都会让壳的代码获得一次控制权,一来壳可以进行反跟踪继续保护软件,二来可以完成某些特殊的任务。其实这就是所谓HOOK技术。
 
5)最后当然是跳转到程序原入口点
 
这个大家比较熟悉,找的就是它。脱壳时大多数也是在这个时候。从这个时候起壳要把控制权交还给原程序了。
 
以上是一个简单的总结。这代表了大多数壳的加载过程,不过特殊的不包括在内,介绍一下让大家了解一些。当然还有一些壳充分利用了PE结构的特点,比如利用TLS加载的特点也挺有趣。
 
一点经验
 
手动脱壳不一定要在程序原入口点。没有人规定你一定要在那里动手。只要你能保证脱壳后程序正常执行就行了。
 
当然我们必需得知道这个原入口点的值,否则我们无法修复程序文件中的Entry Point的值了。
 
那么手动脱壳还有比较常用的地方吗?有就是前面所提到的第2步完成后。此时Section数据已经解密,而且壳还没有来得及进行Hook-Api,很多壳图简单没有把原程序的Import Table破坏掉,这个时候正是我们下手的好时机。
 
要发现这个地方也很容易,一般重定位代码的特征是很明显的。特别是有些壳有压缩功能的时候,更是容易发现。这个时候脱出来的文件组织一下可以达到和原程序几乎相同的大小。而不是通常的内存映象大小。


二、 如何分辨加密壳和压缩壳
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
如何分辨加密壳和压缩壳,通用特点,Od载入时有入口警告或询问是压缩程序吗?普通压缩壳Od调试时候没有异常,加密壳全部有反跟踪代码,会有许多SEH陷阱使OD调试时产生异常。
找OEP的一般思路如下:
先看壳是加密壳还是压缩壳,压缩壳相对来说容易些,一般是没有异常。
外壳解压代码起始点如果是
 
pushfd
pushad
 
跟踪时如果有发现
 
popad
popfd
 
对应
有些壳只有
 
pushad
 
 
popad
 
相对应
附近还有
 
retn
jmp
 
等指令,发生跨断跳跃一般就到了OEP处。
当然也有其他的,如 je OEP等等,一般都是段之间的大跳转,OD的反汇编窗口里都是同一个段的内容,所以更好区别是否是段间跳转。
 
找Oep时注意两点。
1、单步往前走,不要回头。
2、观察。注意poshad、poshfd,popad、popfd等,和外壳代码处对应,注意地址发生大的变化。单步跟踪什 么时候F8走,F7,F4步过?
 
这里我说说关于F8(Step Over)和F7(Step in)的一般方法,粗跟的时候一般都是常用F8走,但是有些call是变形的Jmp,此时就需要F7代过,区别是否是变形Jmp的一个简单方法是比较call的目标地址和当前地址,如果两者离的很近,一般就是变形Jmp了,用F7走。对于Call的距离很远,可以放心用F8步过,如果你再用F7步过,只是浪费时间而已。F8步过对压缩壳用的很多,F7步过加密壳用的很多,如果用F8一不小心就跑飞(程序运行),跟踪失败。
 
加密壳找Oep
对于加密壳,我的方法一般是用OD载入,钩掉所有异常(不忽略任何异常,除了忽略在KERNEL32 中的内存访问异常打勾。有时由于异常过多可以适当忽略一些异常),运行,数着用了多少次Shift+F9程序运行,显然最后一次异常后,程序会从壳跳到OEP开始执行,这就是我们寻找OEP的一个关键,如果程序 Shift+F9后直接退出,很明显加密壳检测调试器,最简单的应付方法就是用OD插件隐藏OD。
单步异常是防止我们一步步跟踪程序,即F8,F7,F4等,Int3中断是检测调试器用的,仅在Win9x系统中有效,2000/XP就会出现断点异常,其它的异常主要是干扰调试。这一系列的异常虽然干扰我们调试,但也给我们指明了一条通路,就是Shift+F9略过所有异常,然后找到最后一处异常,再它的恢复异常处下断点,跟踪到脱壳入口点。
确定从所有Seh异常中走出来,如果前面有大量循环,逐段解压。

三、一般加密壳的脱壳步骤
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
一.如何分辨加密壳:
 
壳分为加密壳和压缩壳,压缩壳目的是减少软件的体积便于在网上传播,
 
而加密壳目的是防止软件被脱壳和破解,所以加密壳全部有反跟踪代码
 
,会有许多SEH陷阱使OD调试时产生异常.也就是说在跟踪过程中很容易
 
导致程序运行,使你无法跟踪分析.而压缩壳相对比较容易,脱壳也比较
 
简单,一般没异常出现.
 
 
二.脱加密壳的相关知识要点:
 
在加密壳中,变形CALL比较多,遇到变形call要F7代过,区别是否是变形Jmp的一个简单方法是比较call的目标地址和当前地址,如果两者离的很近,一般就是变形Jmp了,用F7走。对于Call的距离很远,可以放心用F8步过.加密壳中F7用的比较多,压缩壳中一般用F8单步跟踪就可以搞定.
 
 
脱加密壳,用OD载入,钩掉所有异常(不忽略任何异常,除了忽略在KERNEL32 中的内存访问异常打勾.数着用了多少次Shift+F9程序运行,显然最后一次异常后,程序会从壳跳到OEP开始执行,这就是我们寻找OEP的一个关键,如果程序 Shift+F9后直接退出,很明显加密壳检测调试器,最简单的应付方法就是用OD插件隐藏OD.
 
单步异常是防止我们一步步跟踪程序,这一系列的异常虽然干扰我们调试,但也给我们指明了一条通路,就是Shift+F9略过所有异常,然后找到最后一处异常,再它的恢复异常处下断点,跟踪到脱壳入口点.
 
 
三.加密壳的一般脱壳步骤:
 
介绍:这种方法一般用于加密壳,这是脱加密壳的一种通用方法.
 
第一步:用OD打开程序,点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序.
 
第二步:接着我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数n.
 
第三步:重载程序,再按SHIFT+F9,这次按的次数为上次让程序运行时的次数的n-1次.
 
第四步:此时观察OD的右下角有一个"SE 句柄",这时我们按CTRL+G,输入SE 句柄前的地址!来到这个地址.
 
第五步:在这里,按F2下断点!然后按SHIFT+F9来到断点处!
 
第六步:这时候我们已经跳过了所有异常,然后去掉断点,按F8慢慢向下跟踪很快就到达OEP了.
 
 
修复----重建PE

四、脱壳的八种方法
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
一、    概论
 
  壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种
顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。当然加密壳的保护能力要强得多!
 
二、常见脱壳方法
 
预备知识
 
1.PUSHAD (压栈) 代表程序的入口点,
2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近
3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP),只要我们找到程序真正的OEP,就可以立刻脱壳。
 
方法一:单步跟踪法
1.用OD载入,点“不分析代码!”
2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP
6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。
 
Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP!
 
方法二:ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)
2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!
3.选中下断的地址,断点--->硬件访-àWORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。
 
方法三:内存镜像法
1:用OD打开软件!
2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!
3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到.rsrc.上面的CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP!
 
 
方法四:一步到达OEP
1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,F9运行到此处
2.来到大跳转处,点下F8,到达OEP!
 
方法五:最后一次异常法
1:用OD打开软件
2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序
3:一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数m!
4:CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次)
5:在OD的右下角我们看见有一个SE 句柄,这时我们按CTRL+G,输入SE 句柄前的地址!
6:按F2下断点!然后按SHIFT+F9来到断点处!
7:去掉断点,按F8慢慢向下走!
8:到达程序的OEP!
 
方法六:模拟跟踪法
1:先试运行,跟踪一下程序,看有没有SEH暗桩之类
2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations)
 
内存镜像,项目 30
地址=0054B000
大小=00002000 (8192.)
Owner=check   00400000
区段=.aspack
包含=SFX,imports,relocations
类型=Imag 01001002
访问=R
初始访问=RWE
 
3:地址为0054B000,如是我们在命令行输入tc eip<0054B000,回车,正在跟踪ing。。
 
Btw:大家在使用这个方法的时候,要理解他是要在怎么样的情况下才可以使用
 
方法七:“SFX”法
1:设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
2:切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。
3:重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP)
 
Btw:这种方法不要滥用得好,锻炼能力为妙。
 
‘当然只是对付一些压缩壳。加密壳的话并不是这个样子的。
 
方法八、堆栈回溯法
直接运行程序 OD窗口---堆栈窗口(拉到最底下)---第一返回最接近基址的地方(此方法并不是一定的也可能在第三或第N个。)

既然知道了壳怎么脱。那么如何确定是否是OEP呢。就要看入口特征了。以下是一些程序的入口特征。比较老的版本了会在别的帖子更新最新的入口特征。以后会添加到这个帖子中。。
五、几种编程语言的OEP入口特征





[AppleScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
Microsoft Visual C++ 6.0
 
00496EB8 >/$   55          PUSH EBP                               ;   (初始 cpu 选择)
00496EB9   |.   8BEC       MOV EBP,ESP
00496EBB   |.   6A FF       PUSH -1
00496EBD   |.   68 40375600 PUSH Screensh.00563740
00496EC2   |.   68 8CC74900 PUSH Screensh.0049C78C                ;   SE 处理程序安装
00496EC7   |.   64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00496ECD   |.   50          PUSH EAX
00496ECE   |.   64:8925 00000>MOV DWORD PTR FS:[0],ESP
00496ED5   |.   83EC 58    SUB ESP,58
---------------------------------------------------------------------------------------
Microsoft Visual Basic 5.0 / 6.0
 
00401166   - FF25 6C104000 JMP DWORD PTR DS:[<&MSVBVM60.#100>]    ; MSVBVM60.ThunRTMain
0040116C >   68 147C4000     PUSH PACKME.00407C14
00401171 E8 F0FFFFFF     CALL <JMP.&MSVBVM60.#100>
00401176 0000          ADD BYTE PTR DS:[EAX],AL
00401178 0000          ADD BYTE PTR DS:[EAX],AL
0040117A 0000          ADD BYTE PTR DS:[EAX],AL
0040117C 3000          XOR BYTE PTR DS:[EAX],AL
 
或省略第一行的JMP
 
00401FBC >   68 D0D44000        push dumped_.0040D4D0
00401FC1 E8 EEFFFFFF        call <jmp.&msvbvm60.ThunRTMain>
00401FC6 0000             add byte ptr ds:[eax],al
00401FC8 0000             add byte ptr ds:[eax],al
00401FCA 0000             add byte ptr ds:[eax],al
00401FCC 3000             xor byte ptr ds:[eax],al
00401FCE 0000             add byte ptr ds:[eax],al
----------------------------------------------------------------------
BC++
 
0040163C > $ /EB 10       JMP SHORT BCLOCK.0040164E
0040163E     |66          DB 66                                  ;   CHAR 'f'
0040163F     |62          DB 62                                  ;   CHAR 'b'
00401640     |3A          DB 3A                                  ;   CHAR ':'
00401641     |43          DB 43                                  ;   CHAR 'C'
00401642     |2B          DB 2B                                  ;   CHAR '+'
00401643     |2B          DB 2B                                  ;   CHAR '+'
00401644     |48          DB 48                                  ;   CHAR 'H'
00401645     |4F          DB 4F                                  ;   CHAR 'O'
00401646     |4F          DB 4F                                  ;   CHAR 'O'
00401647     |4B          DB 4B                                  ;   CHAR 'K'
00401648     |90          NOP
00401649     |E9          DB E9
0040164A . |98E04E00    DD OFFSET BCLOCK.___CPPdebugHook
0040164E > \A1 8BE04E00 MOV EAX,DWORD PTR DS:[4EE08B]
00401653 .   C1E0 02    SHL EAX,2
00401656 .   A3 8FE04E00 MOV DWORD PTR DS:[4EE08F],EAX
0040165B .   52          PUSH EDX
0040165C .   6A 00       PUSH 0                                   ; /pModule = NULL
0040165E .   E8 DFBC0E00 CALL <JMP.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA
00401663 .   8BD0       MOV EDX,EAX
-----------------------------------------------------------------------------------------------
Borland Delphi 6.0 - 7.0
 
00509CB0 > $   55          PUSH EBP
00509CB1 .   8BEC       MOV EBP,ESP
00509CB3 .   83C4 EC    ADD ESP,-14
00509CB6 .   53          PUSH EBX
00509CB7 .   56          PUSH ESI
00509CB8 .   57          PUSH EDI
00509CB9 .   33C0       XOR EAX,EAX
00509CBB .   8945 EC    MOV DWORD PTR SS:[EBP-14],EAX
00509CBE .   B8 20975000 MOV EAX,unpack.00509720
00509CC3 .   E8 84CCEFFF CALL unpack.0040694C
-----------------------------------------------------------------------------------------------
易语言入口
00401000 >   E8 06000000     call dump_.0040100B
00401005 50              push eax
00401006 E8 BB010000     call <jmp.&KERNEL32.ExitProcess>
0040100B 55              push ebp
0040100C 8BEC          mov ebp,esp
0040100E 81C4 F0FEFFFF add esp,-110
00401014 E9 83000000     jmp dump_.0040109C
00401019 6B72 6E 6C    imul esi,dword ptr ds:[edx+6E],6C
0040101D 6E              outs dx,byte ptr es:[edi]
 
 
也可能是这样的入口
Microsoft Visual C++ 6.0 [Overlay] E语言
 
00403831 >/$   55          PUSH EBP
00403832   |.   8BEC       MOV EBP,ESP
00403834   |.   6A FF       PUSH -1
00403836   |.   68 F0624000 PUSH Nisy521.004062F0
0040383B   |.   68 A44C4000 PUSH Nisy521.00404CA4                    ;   SE 处理程序安装
00403840   |.   64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00403846   |.   50          PUSH EAX
00403847   |.   64:8925 00000>MOV DWORD PTR FS:[0],ESP
-------------------------------------------------------------------
MASM32 / TASM32入口
 
00401258 >/$   6A 00       push 0                                   ; /pModule = NULL
0040125A   |.   E8 47000000 call <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
0040125F   |.   A3 00304000 mov dword ptr ds:[403000],eax
00401264   |.   6A 00       push 0                                   ; /lParam = NULL
00401266   |.   68 DF104000 push dump.004010DF                       ; |DlgProc = dump.004010DF
0040126B   |.   6A 00       push 0                                   ; |hOwner = NULL
0040126D   |.   6A 65       push 65                               ; |pTemplate = 65
0040126F   |.   FF35 00304000 push dword ptr ds:[403000]             ; |hInst = NULL
00401275   |.   E8 56000000 call <jmp.&user32.DialogBoxParamA>    ; \DialogBoxParamA-
 
 
 
 
 
-------------------------------------------------------------------------
 
 汇编
 
00401000 >  6A 00                push 0
00401002     E8 C50A0000       call <jmp.&KERNEL32.GetModuleHandleA>
00401007     A3 0C354000       mov dword ptr ds:[40350C],eax
0040100C     E8 B50A0000       call <jmp.&KERNEL32.GetCommandLineA>
00401011     A3 10354000        mov dword ptr ds:[403510],eax
00401016     6A 0A                   push 0A
00401018     FF35 10354000     push dword ptr ds:[403510]
0040101E     6A 00                    push 0
00401020     FF35 0C354000     push dword ptr ds:[40350C]
00401026     E8 06000000         call 汇编.00401031
0040102B     50                          push eax
0040102C     E8 8F0A0000       call <jmp.&KERNEL32.ExitProcess>
00401031     55                          push ebp
00401032     8BEC                     mov ebp,esp
00401034     83C4 B0                 add esp,-50
00401037     C745 D0 30000000  mov dword ptr ss:[ebp-30],30
0040103E     C745 D4 0B000000  mov dword ptr ss:[ebp-2C],0B
00401045     C745 D8 37114000  mov dword ptr ss:[ebp-28],汇编.00401137
 
-------------------------------------------------------------------------------------------------
 
VC8入口特征
 
00403A30 > $  E8 6E270000   call VC8.004061A3
 
00403A35   .^ E9 79FEFFFF   jmp VC8.004038B3
 
00403A3/55            push ebp
 
00403A3B  |.  8BEC          mov ebp,esp
 
00403A3D  |.  83EC 08       sub esp,0x8
 
00403A40  |.  897D FC       mov [local.1],edi                        ;  ntdll.7C930228
 
00403A43  |.  8975 F8       mov [local.2],esi
 
00403A46  |.  8B75 0C       mov esi,[arg.2]
 
00403A49  |.  8B7D 08       mov edi,[arg.1]                          ;  VC8.<ModuleEntryPoint>
 
00403A4C  |.  8B4D 10       mov ecx,[arg.3]
 
00403A4F  |.  C1E9 07       shr ecx,0x7
 
----------------------------------------------------------------------------------------------------------------------------


以上五步都看完了的话一般的压缩壳就手到擒来了。。。加密壳每个的方法都不一样 还原也不一样。修复IAT指针什么的就是日后讲PE结构等东西时候的事情了

今天就到这里吧 日后有时间补齐。。  睡觉了先。。。 快12点了。。。

  先给楼上两位大哥跪一个。。。。。
            壳的这章大概就是这个样子了。加密壳的话方法都是不同的。如果写出来容易误导大家。只能是大家以后自己去学习【就好像VMP每个大版本都是不一样的。每个的修复方法也是有差异的。】
                            下面就是介绍一些断点和API了。此章可背可不背。。。用的时候直接查看下就好。其实,有插件我的话完全多此一举。。。(@Bambooqj【2】)此为插件内容
                                   
[AppleScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
拦截窗口:
bp CreateWindow 创建窗口
bp CreateWindowEx(A) 创建窗口
bp ShowWindow 显示窗口
bp UpdateWindow 更新窗口
bp GetWindowText(A) 获取窗口文本
拦截消息框:
bp MessageBox(A) 创建消息框
bp MessageBoxExA 创建消息框
bp MessageBoxIndirect(A) 创建定制消息框
拦截警告声:
bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)
拦截对话框:
bp DialogBox 创建模态对话框
bp DialogBoxParam(A) 创建模态对话框
bp DialogBoxIndirect 创建模态对话框
bp DialogBoxIndirectParam(A) 创建模态对话框
bp CreateDialog 创建非模态对话框
bp CreateDialogParam(A) 创建非模态对话框
bp CreateDialogIndirect 创建非模态对话框
bp CreateDialogIndirectParam(A) 创建非模态对话框
bp GetDlgItemText(A) 获取对话框文本
bp GetDlgItemInt 获取对话框整数值
拦截剪贴板:
bp GetClipboardData 获取剪贴板数据
拦截注册表:
bp RegOpenKey(A) 打开子健
bp RegOpenKeyEx 打开子健
bp RegQueryValue(A) 查找子健
bp RegQueryValueEx 查找子健
bp RegSetValue(A) 设置子健
bp RegSetValueEx(A) 设置子健
功能限制拦截断点:
bp EnableMenuItem 禁止或允许菜单项
bp EnableWindow 禁止或允许窗口
拦截时间:
bp GetLocalTime 获取本地时间
bp GetSystemTime 获取系统时间
bp GetFileTime 获取文件时间
bp GetTickCount 获得自系统成功启动以来所经历的毫秒数
bp GetCurrentTime 获取当前时间(16位)
bp SetTimer 创建定时器
bp TimerProc 定时器超时回调函数
拦截文件:
bp CreateFileA 创建或打开文件 (32)
bp OpenFile 打开文件       (32)
bp ReadFile 读文件         (32)
bp WriteFile 写文件         (32)
拦截驱动器:
bp GetDriveTypeA 获取磁盘驱动器类型
bp GetLogicalDrives 获取逻辑驱动器符号
bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径
 
★★VB程序专用断点★★
bp __vbaStrCmp 比较字符串是否相等
bp __vbaStrComp 比较字符串是否相等
bp __vbaVarTstNe 比较变量是否不相等
bp __vbaVarTstEq 比较变量是否相等
bp __vbaStrCopy 复制字符串
bp __vbaStrMove 移动字符串
bp MultiByteToWideChar ANSI字符串转换成Unicode字符串
bp WideCharToMultiByte Unicode字符串转换成ANSI字符串
 
常见断点设置
 
字符串
bp GetDlgItemTextA(W) ****
bp GetDlgItemInt
bp GetWindowTextA(W) ****
bp GetWindowWord
bmsg XXXX wm_gettext
 
对话框
bp MessageBeep
bp MessageBoxA(W) ****
bp MessageBoxExA(W)
bp DialogBoxParamA(W)
bp GreateWindowExA(W)
bp ShowWindow
bp UpdateWindow
bmsg XXXX wm_command
 
对于VB的程序用bp MessageBoxA是无法断下来的,bp rtcMsgBox
 
注册表相关
bp RegCreateKeyA(W)
bp RegDeleteKeyA(W)
bp RegQueryValueA(W)
bp RegCloseKey
bp RegOpenKeyA(W) ****
 
时间相关
bp GetLocalTime
bp GetFileTime
bp GetSystemtime
 
CD-ROM或磁盘相关
bp GetFileAttributesA(W)
bp GetFileSize
bp GetDriveType
bp GetLastError
bp ReadFile
bpio -h (CD-ROM端口地址) R
 
软件狗
bpio -h 278R
bpio -h 378R
 
INI初始化文件相关
bp GetPrivateProfileStringA ****
bp GetPrivateProfileInt
bp WritePrivateProfileString
bp WritePrivateProfileInt
 
文件访问相关
bp ReadFile
bp WriteFile
bp CreateFileA ****
bp SetFilePointer
bp GetSystemDirectory
 
 
访问注册表类常用API
bp RegOpenKeyA 打开一个现有的注册表项 ****
bp RegOpenKeyExA 打开一个现有的注册表项 ****
bp RegCreateKeyA 在指定的项下创建或打开一个项
bp RegCreateKeyExA 在指定项下创建新项的更复杂的方式
bp RegDeleteKeyA 删除现有项下方一个指定的子项
bp RegDeleteValueA 删除指定项下方的一个值
bp RegQueryValueA 获取一个项的设置值
bp RegQueryValueExA 获取一个项的设置值
bp RegSetValueA 设置指定项或子项的值
bp RegSetValueExA 设置指定项的值
bp RegCloseKey 关闭系统注册表中的一个项(或键)
 
访问文件类常用API
bp CreateFileA 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 ****
bp OpenFile 这个函数能执行大量不同的文件操作
bp ReadFile 从文件中读出数据
bp ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的
 
1、限制程序功能函数
 
EnableMenuItem 允许、禁止或变灰指定的菜单条目
 
EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰)
 
2、对话框函数
 
CreateDialog 从资源模板建立一非模态对话窗
 
CreateDialogParam 从资源模板建立一非模态对话窗
 
CreateDialogIndirect 从内存模板建立一非模态对话窗
 
CreateDialogIndirectParam 从内存模板建立一非模态对话窗
 
DialogBox 从资源模板建立一模态对话窗
 
DialogBoxParam 从资源模板建立一模态对话窗
 
DialogBoxIndirect 从内存模板建立一模态对话窗
 
DialogBoxIndirectParam 从内存模板建立一模态对话窗
 
EndDialog 结束一模态对话窗
 
MessageBox 显示一信息对话框
 
MessageBoxA
 
MessageBoxEx 显示一信息对话框
 
MessageBoxIndirect 显示一定制信息对话框
 
GetDlgItemInt 得指定输入框整数值
 
GetDlgItemText 得指定输入框输入字符串
 
GetDlgItemTextA 得指定输入框输入字符串
 
Hmemcpy 内存复制 (非应用程序直接调用)
 
3、磁盘处理函数
 
GetDiskFreeSpaceA 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量
 
GetDiskFreeSpaceExA 获取与一个磁盘的组织以及剩余空间容量有关的信息
 
GetDriveTypeA 判断一个磁盘驱动器的类型
 
GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母
 
GetFullPathNameA 获取指定文件的详细路径
 
GetVolumeInformationA 获取与一个磁盘卷有关的信息
 
GetWindowsDirectoryA 获取Windows目录的完整路径名
 
GetSystemDirectoryA 取得Windows系统目录(即System目录)的完整路径名
 
4、文件处理函数
 
CreateFileA 打开和创建文件、管道、邮槽、通信服务、设备以及控制台
 
OpenFile 这个函数能执行大量不同的文件操作
 
ReadFile 从文件中读出数据
 
ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调
 
WriteFile 将数据写入一个文件
 
WriteFileEx 与WriteFile类似,只是它只能用于异步写操作,并包括了一个完整的回调
 
SetFilePointer 在一个文件中设置当前的读写位置
 
SetEndOfFile 针对一个打开的文件,将当前文件位置设为文件末尾
 
CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等
 
_lcreat 创建一个文件
 
_lopen 以二进制模式打开指定的文件
 
_lread 将文件中的数据读入内存缓冲区
 
_lwrite 将数据从内存缓冲区写入一个文件
 
_llseek 设置文件中进行读写的当前位置
 
_lclose 关闭指定的文件
 
_hread 将文件中的数据读入内存缓冲区
 
_hwrite 将数据从内存缓冲区写入一个文件
 
OpenFileMappingA 打开一个现成的文件映射对象
 
CreateFileMappingA 创建一个新的文件映射对象
 
MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间
 
MapViewOfFileEx (内容同上)
 
CreateDirectoryA 创建一个新目录
 
CreateDirectoryExA 创建一个新目录
 
RemoveDirectoryA 删除指定目录
 
SetCurrentDirectoryA 设置当前目录
 
MoveFileA 移动文件
 
DeleteFileA 删除指定文件
 
CopyFileA 复制文件
 
CompareFileTime 对比两个文件的时间
 
SetFileAttributesA 设置文件属性
 
SetFileTime 设置文件的创建、访问及上次修改时间
 
FindFirstFileA 根据文件名查找文件
 
FindNextFileA 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件
 
FindClose 关闭由FindFirstFile函数创建的一个搜索句柄
 
SearchPathA 查找指定文件
 
GetBinaryTypeA 判断文件是否可以执行
 
GetFileAttributesA 判断指定文件的属性
 
GetFileSize 判断文件长度
 
GetFileTime 取得指定文件的时间信息
 
GetFileType 在给出文件句柄的前提下,判断文件类型
 
5、注册表处理函数
 
RegOpenKeyA 打开一个现有的注册表项
 
RegOpenKeyExA 打开一个现有的注册表项
 
RegCreateKeyA 在指定的项下创建或打开一个项
 
RegCreateKeyExA 在指定项下创建新项的更复杂的方式
 
RegDeleteKeyA 删除现有项下方一个指定的子项
 
RegDeleteValueA 删除指定项下方的一个值
 
RegQueryValueA 获取一个项的设置值
 
RegQueryValueExA 获取一个项的设置值
 
RegSetValueA 设置指定项或子项的值
 
RegSetValueExA 设置指定项的值
 
RegCloseKey 关闭系统注册表中的一个项(或键)
 
6、时间处理函数
 
CompareFileTime 比较两文件时间
 
GetFileTime 得文件建立,最后访问,修改时间
 
GetLocalTime 得当前本地时间
 
GetSystemTime 得当前系统时间
 
GetTickCount 得windows启动至现时毫秒
 
SetFileTime 设置文件时间
 
SetLocalTime 设置本地时间
 
SetSystemTime 设置系统时间
 
7、进程函数
 
CreateProcessA 创建一个新进程
 
ExitProcess 以干净的方式关闭一个进程
 
FindExecutableA 查找与一个指定文件关联在一起的程序的文件名
 
FreeLibray 释放指定的动态链库
 
GetCurrentProcess 获取当前进程的一个伪句柄
 
GetCurrentProcessId 获取当前进程一个唯一的标识符
 
GetCurrentThread 获取当前线程的一个伪句柄
 
GetExitCodeProces 获取一个已结束进程的退出代码
 
GetExitCodeThread 获取一个已结束线程的退出代码
 
GetModuleHandleA 获取一个应用程序或动态链接库的模块句柄
 
GetPriorityClassA 获取特定进程的优先级别
 
LoadLibraryA 载入指定的动态链接库,并将它映射到当前进程使用的地址空间
 
LoadLibraryExA 装载指定的动态链接库,并为当前进程把它映射到地址空间
 
LoadModule 载入一个windows应用程序,并在指定的环境中运行
 
TerminateProcess 结束一个进程
 
-----------------------------------------------------------------------
 
8、断点设置列表
 
一般处理
 
bpx hmemcpy
 
bpx MessageBox
 
bpx MessageBoxExA
 
bpx MessageBeep
 
bpx SendMessage
 
bpx GetDlgItemText
 
bpx GetDlgItemInt
 
bpx GetWindowText
 
bpx GetWindowWord
 
bpx GetWindowInt
 
bpx DialogBoxParamA
 
bpx CreateWindow
 
bpx CreateWindowEx
 
bpx ShowWindow
 
bpx UpdateWindow
 
bmsg xxxx wm_move
 
bmsg xxxx wm_gettext
 
bmsg xxxx wm_command
 
bmsg xxxx wm_activate
 
时间相关
 
bpint 21 if ah==2A (DOS)
 
bpx GetLocalTime
 
bpx GetFileTime
 
bpx GetSystemtime
 
CD-ROM 或 磁盘相关
 
bpint 13 if ah==2 (DOS)
 
bpint 13 if ah==3 (DOS)
 
bpint 13 if ah==4 (DOS)
 
bpx GetFileAttributesA
 
bpx GetFileSize
 
bpx GetDriveType
 
bpx GetLastError
 
bpx ReadFile
 
bpio -h (Your CD-ROM Port Address) R
 
软件狗相关
 
bpio -h 278 R
 
bpio -h 378 R
 
DeviceIoControl
 
键盘输入相关
 
bpint 16 if ah==0 (DOS)
 
bpint 21 if ah==0xA (DOS)
 
文件访问相关
 
bpint 21 if ah==3dh (DOS)
 
bpint 31 if ah==3fh (DOS)
 
bpint 21 if ah==3dh (DOS)
 
bpx ReadFile
 
bpx WriteFile
 
bpx CreateFile
 
bpx SetFilePointer
 
bpx GetSystemDirectory
 
INI 初始化文件相关
 
bpx GetPrivateProfileString
 
bpx GetPrivateProfileInt
 
bpx WritePrivateProfileString
 
bpx WritePrivateProfileInt
 
注册表相关
 
bpx RegCreateKey
 
bpx RegDeleteKey
 
bpx RegQueryValue
 
bpx RegCloseKey
 
bpx RegOpenKey
 
注册标志相关
 
bpx cs:eip if EAX==0
 
内存标准相关
 
bpmb cs:eip rw if 0x30:0x45AA==0
 
显示相关
 
bpx 0x30:0x45AA do "d 0x30:0x44BB"
 
bpx CS:0x66CC do "? EAX"
         

以下是一片关于断点应用的文章可能有点杂乱甚至跟上边的文章有重复的地方。请见谅我忘记是我从网上摘抄还是自己写的了。。。。。

[AppleScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
拦截窗口:
bp CreateWindow 创建窗口
bp CreateWindowEx(A) 创建窗口
bp ShowWindow 显示窗口
bp UpdateWindow 更新窗口
bp GetWindowText(A) 获取窗口文本
拦截消息框:
bp MessageBox(A) 创建消息框
bp MessageBoxExA 创建消息框
bp MessageBoxIndirect(A) 创建定制消息框
 
 
拦截警告声:
bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)
拦截对话框:
bp DialogBox 创建模态对话框
bp DialogBoxParam(A) 创建模态对话框
bp DialogBoxIndirect 创建模态对话框
bp DialogBoxIndirectParam(A) 创建模态对话框
bp CreateDialog 创建非模态对话框
bp CreateDialogParam(A) 创建非模态对话框
bp CreateDialogIndirect 创建非模态对话框
bp CreateDialogIndirectParam(A) 创建非模态对话框
bp GetDlgItemText(A) 获取对话框文本
bp GetDlgItemInt 获取对话框整数值
拦截剪贴板:
bp GetClipboardData 获取剪贴板数据
拦截注册表:
bp RegOpenKey(A) 打开子健
bp RegOpenKeyEx 打开子健
bp RegQueryValue(A) 查找子健
bp RegQueryValueEx 查找子健
bp RegSetValue(A) 设置子健
bp RegSetValueEx(A) 设置子健
功能限制拦截断点:
bp EnableMenuItem 禁止或允许菜单项
bp EnableWindow 禁止或允许窗口
拦截时间:
bp GetLocalTime 获取本地时间
bp GetSystemTime 获取系统时间
bp GetFileTime 获取文件时间
bp GetTickCount 获得自系统成功启动以来所经历的毫秒数
bp GetCurrentTime 获取当前时间(16位)
bp SetTimer 创建定时器
bp TimerProc 定时器超时回调函数
拦截文件:
bp CreateFileA 创建或打开文件 (32)
bp OpenFile 打开文件        (32)
bp ReadFile 读文件          (32)
bp WriteFile 写文件          (32)
bp GetPrivateProfileStringA (ini文件)
拦截驱动器:
bp GetDriveTypeA 获取磁盘驱动器类型
bp GetLogicalDrives 获取逻辑驱动器符号
bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径
 
★★VB程序专用断点★★
bp __vbaStrCmp 比较字符串是否相等
bp __vbaStrComp 比较字符串是否相等
bp __vbaVarTstNe 比较变量是否不相等
bp __vbaVarTstEq 比较变量是否相等
bp __vbaStrCopy 复制字符串
bp __vbaStrMove 移动字符串
bp MultiByteToWideChar ANSI字符串转换成Unicode字符串
bp WideCharToMultiByte Unicode字符串转换成ANSI字符串
解自校验
bpx CreateFileA
bpx GetFileSize
bpx SetFilePointer
bpx ExitProcess
F12堆栈调用
破解思路
C类
Point-H法
bp GetDlgItem(断输入框)
bp MessageBoxA(断对话框)
字符串法
F12堆栈调用
B、D类
DEDE、PE Explorer作为强有力的辅助工具
关键还是找按妞事件
Point-H法
bp GetDlgItem(断输入框)
bp MessageBoxA(断对话框)
字符串法
F12堆栈调用
V类
VBExplorer、GetVBRes、SmatCheck作为强有力的辅助工具
关键还是找按妞事件
bp rtcMsgBox(断对话框)
*********************************
如果是重启验证就使用最开始的那些断点
 
C类语言破解
1、bp MessageBoxA(W)(断对话框)—Ctrl+N
2、Point-H法
3、bp GetDlgItem/GetWindowTextA(W)/GetWindowTextLengthA(W) (断输入框)
4、字符串法—插件/搜索所有参考文本
 
Delphi/BC++语言破解
1、DEDE结合PE Explorer找按妞事件
2、Point-H法
3、bp GetDlgItem/GetWindowTextA(W)/GetWindowTextLengthA(W) (断输入框)
4、bp MessageBoxA(W)(断对话框)—Ctrl+N
5、字符串法—插件/搜索所有参考文本
6、如果程序界面标题有[未注册/注册/VIP版/标准版/钻石版] 之类字样,可以通过DEDE查找FormCreate/FormShow,找到关键标志位
 
VB语言破解
1、VBExplorer查找按钮事件
2、有提示框则   bp rtcMsgBox(断对话框)
3、通过bp __vbaStrCmp/__vbaStrComp/__vbaVarTstEq
4、万能断点法(816C24)
5、字符串法—插件/搜索所有参考文本
 
易语言破解
1、借助E-Code Explorer查找按钮事件
2、下消息断点,查看堆栈再返回
3、eCode法–断按钮事件
4、字符串法—插件/搜索所有参考文本
按钮事件固定模式:
0040EC78      837D F4 00       cmp dword ptr ss:[ebp-C],0          ;关键判断
0040EC7C      0F84 3B000000    je dcse.0040ECBD                     ;关键跳
0040EC82      68 04000080      push 80000004
0040EC87      6A 00            push 0
0040EC89      68 EC904000      push dcse.004090EC
0040EC8E      68 01030080      push 80000301
0040EC93      6A 00            push 0
00 40EC95      68 00000000      push 0
0040EC9A      68 04000080      push 80000004
0040EC9F      6A 00            push 0
0040ECA1      68 F1904000      push dcse.004090F1
0040ECA6      68 03000000      push 3
0040ECAB      BB 00030000      mov ebx,300
0040ECB0      E8 92000000      call dcse.0040ED47
0040ECB5      83C4 28          add esp,28
0040ECB8      E9 36000000      jmp dcse.0040ECF3
0040ECBD      68 04000080      push 80000004
0040ECC2      6A 00            push 0
0040ECC4      68 CC904000      push dcse.004090CC
0040ECC9      68 01030080      push 80000301
0040ECCE      6A 00            push 0
0040ECD0      68 00000000      push 0
0040ECD5      68 04000080      push 80000004
0040ECDA      6A 00            push 0
0040ECDC      68 02914000      push dcse.00409102
0040ECE1      68 03000000      push 3
0040ECE6      BB 00030000      mov ebx,300
0040ECEB      E8 57000000      call dcse.0040ED47
0040ECF0      83C4 28          add esp,28
0040ECF3      8BE5             mov esp,ebp
0040ECF5      5D               pop ebp
0040ECF6      C3               retn
 
******************************************************************************************************************************************
按钮事件
 
1、有注册错误/正确提示
bp MessageBoxA
bp rtcMsgBox
如果事先找不到按钮事件,可以通过下消息断点,返回后回溯即可找到按钮事件起始位置
 
2、无任何提示
bp GetDlgItem
可以通过bp GetDlgItem获取按钮事件代码
 
3、未注册一启动或者关闭就跳出个注册框或者提示框
bp RegOpenKey(A)
bp CreateFileA
bp GetPrivateProfileStringA
文件: reg/ini/dll/其他
至于保存到什么文件,可以使用以下方法
1、查找字符串,看是否有可疑文件名或者注册表键名
2、猜。。。下断点观察
3、按钮事件跟踪
 
4、未注册一启动或者关闭就打开网页链接
bp ShellExecuteA
类似的组合
Cmp/test/其他判断
Je/jne/jne/jz XXXXXXXX
软件启动—>判断是否注册—>是否Open
断下后回溯代码即可找到关键点,常用的方法,转存跟踪法
 
5、未注册就功能使用限制
判断是否注册—>某种功能是否让你使用,如果不能够用,一定会有提示的,或是错误提示或是弹出注册框等,那么从提示入手即可找到解除限制的关键
不完美破解:解除功能限制
 
6、未注册就日期限制
bp GetLocalTime 获取本地时间
bp GetSystemTime 获取系统时间
bp GetFileTime 获取文件时间
一般下这几个断点比较难分析关键
捷径:查找字符串–找可疑文件–一般以DLL多见
只要不让它读取到这个DLL即可解除限制
 
7、Demo(演示试用版)–功能残缺
这个和上面的功能限制不一样
功能限制是软件本身就有这个功能,对程序而言,相对应的功能代码也存在
Demo即是没这个功能,空架子一个而已
一句话:破解也无用!
 
8、网络验证
无法登陆有错误提示者:下消息断点回溯代码,找按钮事件,从头来过,从按钮事件开始跟踪,找网络验证CALL(所需要登陆的地址在这个CALL里面),接下来就是分析返回值或者改登陆地址为本地(127.0.0.1),再后面就需要改某些跳转了
无法登陆自动退出者:下bp ExitProcess断下(一般可以断下)回溯代码,找按钮事件,从来来过,从按钮事件开始跟踪,找网络验证CALL(所需要登陆的地址在这个CALL里面),接下来就是分析返回值或者改登陆地址为本地(127.0.0.1),再后面就需要改某些跳转了
 
9、狗加密
一般狗加密软件,一启动就会检测所需要的狗文件,若没有狗文件,提示错误
这里我们有两个入手点
1、“一启动就会检测所需要的狗文件”,下bp CreateFileA等断点,断下后,回溯
2、“若没有狗文件,提示错误”,下bp MessageBoxA,断下后,回溯
 
总结:
从上面的介绍说明可以看出,有这么一个共同点—按钮事件,可以这么说,按钮事件是我们的思路之门
按钮事件可以这样得来:
1、通过下相应断点,回溯代码
2、通过辅助工具快捷的得到(VBExplorer、DEDE)
 
******************************************************************************************************************************************
重启验证
80%-90%的软件基本都是重启验证类型
 
1、注册表类型
Bpx RegOpenKeyA(W)
Bpx RegOpenKeyExA(W)
2、ini文件类型(*.reg/*.ini)
Bpx GetPrivateProfileStringA
3、其他文件类型(*.dat/*.lic…)
Bpx CreateFileA(W)
Bpx ReadFile
4、DLL文件操作类型
如果没有什么有效的拦截函数,不妨试一下Bpx CreateFileA(W).余下的就是通过你的经验去判断了(例如:35)
注意:建议使用Bpx断点,这样,比较快捷、准确。尚若Bpx失效,再尝试bp
方便断点设置的有以下3个断点插件,APIBreak中国版(不带Point-H),APIBreak英文版(带Point-H)+BP-Olly
 
******************************************************************************************************************************************
去nag框的方法
 
1、若是Delphi&BCB程序,可以通过FormCreate法查找到FormCreate,再单步跟踪,找到窗口的调用CALL,一般它的具体形式是call dword ptr ds:[edx+E8]
 
2、OD载入程序后,单步跟踪,找到窗口的调用CALL
注意看第37
 
******************************************************************************************************************************************
两种经典方法
 
1、Point-H法
此法类似下断点bp GetWindowText(A/W),但是,在某些Point-H断不下来的情况下,bp GetWindowText(A/W)却可以断下来。Point-H能够断下来的,bp GetWindowTextA基本上都可以顺利断下
 
2、转存跟踪法
到底是byte/word/Dword断点,一般情况下是byte,其他特殊情况大家临场判断
 
******************************************************************************************************************************************
一些常规断点
 
拦截窗口:
bp CreateWindow 创建窗口
bp CreateWindowEx(A/W) 创建窗口
bp ShowWindow 显示窗口
bp UpdateWindow 更新窗口
bp GetWindowText(A/W) 获取窗口文本
 
拦截消息框:
bp MessageBox(A/W) 创建消息框
bp MessageBoxExA 创建消息框
bp MessageBoxIndirect(A/W) 创建定制消息框
 
拦截警告声:
bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)
 
拦截对话框:
bp DialogBox 创建模态对话框
bp DialogBoxParam(A/W) 创建模态对话框
bp DialogBoxIndirect 创建模态对话框
bp DialogBoxIndirectParam(A/W) 创建模态对话框
bp CreateDialog 创建非模态对话框
bp CreateDialogParam(A) 创建非模态对话框
bp CreateDialogIndirect 创建非模态对话框
bp CreateDialogIndirectParam(A/W) 创建非模态对话框
bp GetDlgItemText(A) 获取对话框文本
bp GetDlgItemInt 获取对话框整数值
 
拦截剪贴板:
bp GetClipboardData 获取剪贴板数据
 
拦截注册表:
bp RegOpenKey(A/W) 打开子健
bp RegOpenKeyEx(A/W) 打开子健
bp RegQueryValue(A/W) 查找子健
bp RegSetValue(A/W) 设置子健
bp RegSetValueEx(A/W) 设置子健
功能限制拦截断点:
 
bp EnableMenuItem 禁止或允许菜单项
bp EnableWindow 禁止或允许窗口
 
拦截时间:
bp GetLocalTime 获取本地时间
bp GetSystemTime 获取系统时间
bp GetFileTime 获取文件时间
bp GetTickCount 获得自系统成功启动以来所经历的毫秒数
bp GetCurrentTime 获取当前时间(16位)
bp SetTimer 创建定时器
bp TimerProc 定时器超时回调函数
 
拦截文件:
bp CreateFileA 创建或打开文件 (32)
bp OpenFile 打开文件        (32)
bp ReadFile 读文件          (32)
bp WriteFile 写文件          (32)
bp GetPrivateProfileStringA     (ini文件)
 
拦截驱动器:
bp GetDriveTypeA 获取磁盘驱动器类型
bp GetLogicalDrives 获取逻辑驱动器符号
bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径
 
★★VB程序专用断点★★
bp __vbaStrCmp 比较字符串是否相等
bp __vbaStrComp 比较字符串是否相等
bp __vbaVarTstNe 比较变量是否不相等
bp __vbaVarTstEq 比较变量是否相等
bp __vbaStrCopy 复制字符串
bp __vbaStrMove 移动字符串
bp MultiByteToWideChar ANSI字符串转换成Unicode字符串
bp WideCharToMultiByte Unicode字符串转换成ANSI字符串
 
******************************************************************************************************************************************
灰色按钮
有两种情况:通过代码和控件属性
 
VB语言:
代码:ctrl+b查找 816C24,在JMP下断,然后F2运行程序,把 push ebp 改为 retn,或者把这些代码全NOP掉
控件属性:VBExplorer 辅助工具改属性
 
Delphi/BC++语言:
代码:通过DEDE找FormCreate,记下地址,改 retn
控件属性:相关辅助工具改属性
 
易语言
代码:bp EnableWindow,断下后返回,把 push ebp 改为 retn
控件属性:用十六进制工具查找 BOB4C5A5 ,把它后面的 07 05
 
破解时常用断点:
VB MASM32 VC BCB 易语言 Delphi
 
VB破解
 
1、VBExplorer查找按钮事件
2、有提示框则bp rtcMsgBox
3、通过bp __vbaStrCmp/__vbaStrComp/__vbaVarTstEq
bp __vbaStrCmp
bp __vbaStrComp
4、万能断点法(816C24)
注册验证程序可以用这个断点下断,一般离程序访问注册表很近:
bp __vbaStrToAnsi
5.F12堆栈调用
总结:
VB程序破解的关键跳转,一般与其它语言的不同,没有JPM XXXXXXX
一般以 JE/JNE XXXXXXXXX 跳转记录一般不会很远(虽然是短距离跳转,但是关键就在这里,可以设置大量的信息) 。如果发现False/True 可能是关键点
VB:
XXXXXXX JE/JNE XXXXX
设置信息
设置信息
Delphi BC++ 易语言 VC++ 汇编:
XXXXXXX JE/JNE XXXXX
设置信息
设置信息
XXXXXXX JMP XXXXX
设置信息
设置信息
 
VC++ 汇编(有的 一段,一段的)
XXXXXXX JE/JNE XXXXX
设置信息
设置信息
retn
push xx
设置信息
设置信息
retn
push xx
设置信息
设置信息
retn
 
易语言
易语言破解思路:
1. 信息框法 bp MessageBoxA(断对话框)
2.字符串法
查看易语言文本信息:
bp GetProcessHeap F9运行4次,取消断点 执行ALT+F9 用户代码 F8单步走
或者在区段为”.data/”.ecode”下断,运行
 
3.窗口标题法 bp SetWindowTextA
4.F12堆栈调用
 
0040C0CB=易语言.0040C0CB (ASCII “shaonanshaonvluntan”)
 
DELPHI破解:
1、DEDE、PE Explorer ResScope作为强有力的辅助工具找按妞事件
2、Point-H法
3、bp GetDlgItem/GetDlgItemTextA(断输入框)
4、bp MessageBoxA(W)(断对话框)—Ctrl+N
5、字符串法—插件/搜索所有参考文本
6、如果程序界面标题有[未注册/注册/VIP版/标准版/钻石版] 之类字样的
可以通过查找FormCreate/FormShow—-DEDE,找到关键标志位!
来判断程序怎么样的判断是否注册或者用户类型
7. 窗口标题法 bp SetWindowTextA
8.F12堆栈调用
注册表:
bpx RegCreateKeyExA 对于Delphi程序程序来说,用这个断点比较合适
bp RegCreateKeyExA 对于加了壳的程序
注册码:Rc1-420+用户名(不能为整数,)+C00L
 
C+破解
 
C类
Point-H法
bp GetDlgItem(断按下按钮)
bp MessageBoxA(断对话框)
字符串法
F12堆栈调用
窗口标题法 bp SetWindowTextA
★★C+程序专用断点★★
bp lstrcmpA (KERNEL32.lstrcmpA) 比较用法
bp _mbscmp //比较
C类程序的经典断点:
bp GetWindowTextA(断按下按钮) //也是适用于其它语言
bp GetWindowTextLengthA(断按下按钮) //也是适用于其它语言
bp GetDlgItem(断按下按钮)            //也是适用于其它语言
bp GetDlgItemTextA
ds:[004021C8]=77C01881 (msvcrt._mbscmp)
 
BC++破解
1、DEDE、PE Explorer作为强有力的辅助工具找按妞事件
2、Point-H法
3、bp GetDlgItem/GetDlgItemTextA(断输入框)
4、bp MessageBoxA(W)(断对话框)—Ctrl+N
5、字符串法—插件/搜索所有参考文本
6、如果程序界面标题有[未注册/注册/VIP版/标准版/钻石版] 之类字样的
可以通过查找FormCreate/FormShow—-DEDE,找到关键标志位!
来判断程序怎么样的判断是否注册或者用户类型
7.窗口标题法 bp SetWindowTextA
8.F12堆栈调用
 
bpx RegCreateKeyExA 对于Delphi程序程序来说,用这个断点比较合适
bp RegCreateKeyExA 对于加了壳的程序
MASM32 / TASM32破解
入口点 :
004011C7 6A 00           push 0
004011C9 E8 5E070000     call 0040192C
004011CE A3 70614000     mov dword ptr ds:[406170],eax
004011D3 6A 00           push 0
004011D5 68 EE114000     push MASM32.004011EE
004011DA 6A 00           push 0
004011DC 68 C8000000     push 0C8
Point-H法
bp GetDlgItem(断按下按钮)
bp MessageBoxA(断对话框)
字符串法
F12堆栈调用
窗口标题法 bp SetWindowTextA
 
OD常用断点
 
1、限制程序功能函数
 
EnableMenuItem 允许、禁止或变灰指定的菜单条目
 
EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰)
 
2、对话框函数
 
CreateDialog 从资源模板建立一非模态对话窗
 
CreateDialogParam 从资源模板建立一非模态对话窗
 
CreateDialogIndirect 从内存模板建立一非模态对话窗
 
CreateDialogIndirectParam 从内存模板建立一非模态对话窗
 
DialogBox 从资源模板建立一模态对话窗
 
DialogBoxParam 从资源模板建立一模态对话窗
 
DialogBoxIndirect 从内存模板建立一模态对话窗
 
DialogBoxIndirectParam 从内存模板建立一模态对话窗
 
EndDialog 结束一模态对话窗
 
MessageBox 显示一信息对话框
 
MessageBoxEx 显示一信息对话框
 
MessageBoxIndirect 显示一定制信息对话框
 
GetDlgItemInt 得指定输入框整数值
 
GetDlgItemText 得指定输入框输入字符串
 
GetDlgItemTextA 得指定输入框输入字符串
 
Hmemcpy 内存复制 (非应用程序直接调用)
 
3、磁盘处理函数1273?GAMEHK所有–admin?11326
 
GetDiskFreeSpaceA 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量
 
GetDiskFreeSpaceExA 获取与一个磁盘的组织以及剩余空间容量有关的信息
 
GetDriveTypeA 判断一个磁盘驱动器的类型
 
GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母
 
GetFullPathNameA 获取指定文件的详细路径
 
GetVolumeInformationA 获取与一个磁盘卷有关的信息
 
GetWindowsDirectoryA 获取Windows目录的完整路径名
 
GetSystemDirectoryA 取得Windows系统目录(即System目录)的完整路径名
 
4、文件处理函数
 
CreateFileA 打开和创建文件、管道、邮槽、通信服务、设备以及控制台
 
OpenFile 这个函数能执行大量不同的文件操作
 
ReadFile 从文件中读出数据
 
ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调
 
WriteFile 将数据写入一个文件
 
WriteFileEx 与WriteFile类似,只是它只能用于异步写操作,并包括了一个完整的回调
 
SetFilePointer 在一个文件中设置当前的读写位置
 
SetEndOfFile 针对一个打开的文件,将当前文件位置设为文件末尾
 
CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等
 
_lcreat 创建一个文件
 
_lopen 以二进制模式打开指定的文件
 
_lread 将文件中的数据读入内存缓冲区
 
_lwrite 将数据从内存缓冲区写入一个文件
 
_llseek 设置文件中进行读写的当前位置
 
_lclose 关闭指定的文件
 
_hread 将文件中的数据读入内存缓冲区
 
_hwrite 将数据从内存缓冲区写入一个文件
 
OpenFileMappingA 打开一个现成的文件映射对象
 
CreateFileMappingA 创建一个新的文件映射对象
 
MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间
 
MapViewOfFileEx (内容同上)
 
CreateDirectoryA 创建一个新目录
 
CreateDirectoryExA 创建一个新目录
 
RemoveDirectoryA 删除指定目录
 
SetCurrentDirectoryA 设置当前目录
 
MoveFileA 移动文件
 
DeleteFileA 删除指定文件
 
CopyFileA 复制文件
 
CompareFileTime 对比两个文件的时间
 
SetFileAttributesA 设置文件属性
 
SetFileTime 设置文件的创建、访问及上次修改时间
 
FindFirstFileA 根据文件名查找文件
 
FindNextFileA 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件
 
FindClose 关闭由FindFirstFile函数创建的一个搜索句柄
 
SearchPathA 查找指定文件
 
GetBinaryTypeA 判断文件是否可以执行
 
GetFileAttributesA 判断指定文件的属性
 
GetFileSize 判断文件长度
 
GetFileTime 取得指定文件的时间信息
 
GetFileType 在给出文件句柄的前提下,判断文件类型
 
5、注册表处理函数
 
RegOpenKeyA 打开一个现有的注册表项
 
RegOpenKeyExA 打开一个现有的注册表项
 
RegCreateKeyA 在指定的项下创建或打开一个项
 
RegCreateKeyExA 在指定项下创建新项的更复杂的方式
 
RegDeleteKeyA 删除现有项下方一个指定的子项
 
RegDeleteValueA 删除指定项下方的一个值
 
RegQueryValueA 获取一个项的设置值
 
RegQueryValueExA 获取一个项的设置值
 
RegSetValueA 设置指定项或子项的值
 
RegSetValueExA 设置指定项的值
 
RegCloseKey 关闭系统注册表中的一个项(或键)
 
6、时间处理函数
 
CompareFileTime 比较两文件时间
 
GetFileTime 得文件建立,最后访问,修改时间
 
GetLocalTime 得当前本地时间
 
GetSystemTime 得当前系统时间
 
GetTickCount 得windows启动至现时毫秒
 
SetFileTime 设置文件时间
 
SetLocalTime 设置本地时间
 
SetSystemTime 设置系统时间
 
7、进程函数
 
CreateProcessA 创建一个新进程
 
ExitProcess 以干净的方式关闭一个进程
 
FindExecutableA 查找与一个指定文件关联在一起的程序的文件名
 
FreeLibray 释放指定的动态链库
 
GetCurrentProcess 获取当前进程的一个伪句柄
 
GetCurrentProcessId 获取当前进程一个唯一的标识符
 
GetCurrentThread 获取当前线程的一个伪句柄
 
GetExitCodeProces 获取一个已结束进程的退出代码
 
GetExitCodeThread 获取一个已结束线程的退出代码
 
GetModuleHandleA 获取一个应用程序或动态链接库的模块句柄
 
GetPriorityClassA 获取特定进程的优先级别
 
LoadLibraryA 载入指定的动态链接库,并将它映射到当前进程使用的地址空间
 
LoadLibraryExA 装载指定的动态链接库,并为当前进程把它映射到地址空间
 
LoadModule 载入一个windows应用程序,并在指定的环境中运行
 
TerminateProcess 结束一个进程


文章大概就到这里了。。。初级部分已经写完了。资源什么的在楼下我会共享。插件我是打包的我自己的插件包。。而不是一个插件。。比较大。。。
posted on 2015-10-12 11:23  jony413  阅读(2837)  评论(0)    收藏  举报