软件破解常见问题
! m3 _8 Y# N( c% {0 d 来源:看雪学院
O/ ^$ n# {5 m1 i
# f5 ?* J; s0 T7 h ! D, w8 o/ h% c7 K/ l" K
3 B- E& m* L& v& N! J7 X
- t' O! S2 r L0 @- y% Y我系统是win9x,每次SOFTICE都自动装载,在windows下一按CTRL+D自动激活它,有什么办法解决? |
% X2 N" Y2 ^5 z% c3 ^) P2 g- _- a/ ?
1 u* b& c2 L# ?* `' n8 C这是SOFTICE安装时默认时改变了AUTOEXEC.BAT,自动加了一行wince.exe。每次系统启动时自动运行AUTOEXEC.BAT时将SOFTICE装载,你只要去掉这一行,问题就解决了。在你需要用SOFTICE时,在纯DOS环境下,在SOFTICE目录执行winice.exe文件即可装载。你也可自建一批处理命令来在纯DOS下装载SOFTICE。 |
0 ^1 F& D) T2 M# t4 T* w8 ?
9 Y5 J# p3 q. k3 Z+ R" s' o j1 l
; V' N/ s4 k* [( N( w1 D) K1 F: o, M1 a+ i- G
1 T* E: H. A) T) i* }* n/ v) K
2、如何知道软件是被什么加的密? | 0 P! T# y$ `: |9 P+ A+ J
- U% Y# j: S& @( i9 n
用TYP或GetTyp侦测文件类型或用procdump查看文件的section就可以知道用什么加密 . | + m8 f8 w5 r8 f; J6 d" c
' B8 K/ t3 v$ o8 X+ ~: e/ n! B7 U2 L0 Y3 P- ~. S Z7 q" g
, V' _& _8 }( l4 z
7 \* x! P4 |+ V2 S" n9 K4 Z& e3、经常看到脱壳时下命令bpx loadlibrarya, 下命令后SOFTICE告知未定义,我的SOFTICE怎么拦不住? |
4 u B( F& ^( c y, R3 p4 v5 B
. r1 R5 R4 V* k; a+ g3 y在 softice 的目录下有一个文件叫 winice.dat % b7 M* q4 S6 |3 Q. r
其实是个文本文件,将这文件的最后几行把他改成如下 :
+ s- U; A7 D& p- L, L前面有分号的就是注解,把后面有 *32.dll 的方号去掉就行了
y9 d0 r( t5 [7 [顺便加上 vb5, vb6 的 dll, 也可拦 vb 的 function 了 ) l# A5 L$ W M! L
EXP=c:\windows\system\kernel32.dll 1 A" ?4 f! C, ~; s! m) {( x: H
EXP=c:\windows\system\user32.dll ( M! h# v9 v2 s# g. U
EXP=c:\windows\system\gdi32.dll
: Z: l& H4 v6 P; @; s, M3 Z0 REXP=c:\windows\system\comdlg32.dll # w5 [0 @$ S4 V/ K- O6 U% U
EXP=c:\windows\system\shell32.dll 2 J- z1 ?4 d8 Z* x9 B0 {; b! ~
EXP=c:\windows\system\advapi32.dll
; p) k, T5 Q$ N5 x/ VEXP=c:\windows\system\shell232.dll
# x, e, I1 u& b) N2 i& NEXP=c:\windows\system\comctl32.dll 4 E+ {: @* O% v& I2 d. A
;EXP=c:\windows\system\crtdll.dll
3 ]& c7 y; V# V3 T;EXP=c:\windows\system\version.dll & D2 h( N, r- O- z! A3 }
EXP=c:\windows\system\netlib32.dll 9 P3 L/ G) f4 Q+ S8 X
;EXP=c:\windows\system\msshrui.dll
6 E# [1 t7 p- K% O& V4 O9 \EXP=c:\windows\system\msnet32.dll ; ~; U; @# t/ |( h
EXP=c:\windows\system\mspwl32.dll
8 p$ E8 O# u J. ]( e( a) T. |;EXP=c:\windows\system\mpr.dll 0 t3 D0 u1 D8 \1 y
exp=c:\soft\95logo3\vb40032.dll 2 H0 ~# U3 F# g# `3 d V
exp=c:\windows\system\msvbvm50.dll 8 b* J+ u; Q, J) r S4 i6 E
exp=c:\windows\system\msvbvm60.dll |
# u( p2 r+ ]# w5 o9 w" I4 t4、我在调试软件时,经常看到寄存器是EAX、EBX、ECX或AX、BX、CX等,这是怎么回事?6 Y1 F7 ?8 u) k7 j" T& R) l% E
因为win9x系统是一个16位和32位混合的操作系统,在这系统上能运行16位和32位的应用软件,所以你如调试不同位数的软件时,在寄存器上就反应出来了,EAX、EBX、ECX等是32位寄存器,而AX、BX、CX等是来表示16位寄存器。
1 N6 G; J/ F! Y B' Z2 y+ u5、如何在TRW2000下拦截VB运行库中的函数? 3 X5 d+ [! k) U) R7 ~. I4 Z
你要用TRW2000拦截Vb程序,需要用1.15版以上,将相应的VB运行库复制到TRW2000的DLL目录下,你也可用此法装载其它DLL文件。 ; M: T& S2 _, S, u L
6、问:我只会用bpx hmemcpy来下断点,也看过看雪先生的教学文章,但对其他断点一直是一知半解,所以现在问题来了。 某些程序并没有输入注册码的地方,只在开始运行时弹出一个对话框,告诉你还剩多少天了,有延迟,这种软件一般怎么破解。如:LView pro、PaintShop pro等 ; G& K: P" S0 Y# a1 Q
答:7 y0 w3 s) h1 m2 D
程序像一条竹竿,断点就是上面的结(当然是我们设定的)。选择一个好的断点有助于我们少走弯路。其实你说的情况,没有注册窗口,只有nag. 此时可能仍可以用bpx hmemcpy。此外,你可以采用其它方法。 " M) @8 j5 h( X7 O" Y
以paint shop pro 5.01 evaluation为例。你用bpx hmemcpy是拦不住的。但还可以用如下几种方法。
3 [: T- L9 A+ x3 s1. 当nag窗口出现后,激活trw or softice,下断点bpx lockmytask(或bpx destroywindow),回到psp.exe,按下start按钮后程序就会阻断。再用F10 或 F12走。直到你见到如下结构。 & g9 X: m0 P4 C
cs:******** call ****** <-- 用F10带过这一步后会有延迟画面。 3 g' u' ?; v$ S" i
cs:******** test al, al <-- 此时你在这行。程序确定你按下的是何按钮 - L. I2 Z2 N$ c/ Q
这时按下F6,你就可以找到这个call前的code,并在其上下断点。若在这之前有跳转,如jz,jnz等,你就可以想办法使nag窗口不出现。
q2 ]# ?3 L; Q4 s5 J* g5 L2. 在这个nag窗口中,你会见到一些"版权宣言"及"你已经试用了*天,还有**天可以用"等的话。将之抄下,叫出trw 或softice,用 " I3 N6 a6 }3 @! o, q L3 O
s 0 ffffffff "抄下的话"(trw) 或
6 Q3 {8 C9 \: k" k+ Z- ts 0 L ffffffff "抄下的话"(SOFTICE)找到其调用的地址。下断点 bpm "找到的地址"来拦截,余下的同例1。 6 j& I: x% X( W9 {
3. 若程序主窗口完全出现后再有延迟窗口出现,你可以在主窗口出现,而延迟窗口还未出现之际强行叫出trw(ctrl+N) 或softice(ctrl+D),然后一步步走,直到你确定了延迟窗口出现的那行code. * d! ], ^. ^3 u1 K2 f
4. 如程序没有被压缩、加壳。你可以用w32dasm等静态反汇编方法,在string reference中找到延迟窗口中的话,在这代码前下断点拦截。 8 z" e. I& U( b9 }' K* c
以上简单介绍了几种方法,不知对你是否有帮助。
- T$ J0 a2 [7 [* H7、问:命令"bpx regqueryvalueexa if *(esp->8)>='Soft' do "d(esp->14)"我看不大懂,您能给讲一下吗?多谢。 3 a9 j& y) H! P, V" t
答:这个指令是一个复合指令,因为存注册码的键值是Softkey,其名字在[esp+8]中,其值在[esp+14]中.
9 R* [/ K4 u$ p/ A% ` N- X当其值等于或大于Soft(因为只允许4个字符,不能输全键名)时中断,就拦在读Softkey的那个Call.
; C1 A7 i( y# y i否则每次程序call regqueryvalueexa时都会被拦. 5 k4 o/ z7 t1 M* S
拦住后,显示[esp+14]的内容.至于详细用法,你可以参考softice的用户手册,其中会解释*,
% A3 r$ U# [7 t2 V! S- {" E->等内容的. 开始时只要照做,以后提高了再弄明白原理就可以了. 2 R8 [ W0 n c e* t
8、问:为什么用W32DASM反汇编不能显示中文信息?
$ n9 a; b I9 P8 c# Z答:wdasm是这样的,你可以用十六进制编辑器查找中文改为英文后再反汇编. " a: T5 O4 g8 X
9、问:请问如何修改TRW2000的字体颜色? 3 ?% E: L- ~1 L& v. t% o2 N
答:在TRW2000命令下用ver blue。
0 T t/ e9 S0 u10、问:介绍一下Launcher Generator补丁制作工具 6 E8 e( z6 [: A- h% q9 C$ U
答:LGen的优点在于它可以控制何时Patch. 在运行它生成的Loader后,会出现一个提示窗,当按下OK按钮后,它才对目标程序做Patch.用法很简单,而且界面是GUI的.在http://ringzer0.cjb.net(它的老家,Tools项下)可以下载或者其它破解工具站点找. / {/ d* i- H/ M
11、问:我在用hiew改如下代码时:
/ i! @; u/ D p& j; g9 W8 A00469206 e877d5f9ff call 00406782
5 Q4 }. I, T' g2 q. q( s0046920b 391d3c844e00 cmp dword ptr [004e843c],ebx6 v+ x/ g/ J0 ^9 n! b: C
我想屏蔽掉第一行:是否用 nop指令?我试了试,但修改后,发现第二行 变成了: 00469207 f4 hlt 是否对程序有影响,修改时必须保证源字节数? 8 W+ x/ D/ {9 F/ a
答:当然有影响,你修改必须保证nop的字节=e877d5f9ff的字节:
0 S- v8 n: E" ~# y7 F$ ` - U5 i' i0 \* @5 V7 x# _
00469206 e877d5f9ff call 00406782 这行要5个nop来填充即: 9090909090代替e877d5f9ff 2 Q" f0 o2 Z5 O) `; X. L# p# `
你在hiew中连续改5行后,这一行就会又正常了0046920b 391d3c844e00 cmp dword ptr [004e843c],ebx
1 N! d4 W8 B! _12、问:我在破解时,追到一行这样的代码:
# {- W1 N( F+ _6 O00406582 0f84f1000000 je 000406679 ! o/ }8 X+ E2 e- a; o5 L
我想改变程序的方向,je改为jne后是否可以,如不是该怎样,请指教。 $ h' n9 J9 |. T9 z
另,在win32dasm中,我想改反汇编后的代码,如何改?是否得用别的16位编辑器,怎么用?
+ ]6 \' x2 q7 e5 g& c5 @. T7 W3 I以上两个问题,困惑了我很久,请各位多指教,不胜感激!!!!!!! m/ k/ |+ ?: J* Q
答: 0 }- D" g% C# W6 g
①00406582 0f84f1000000 je 000406679 2 h, A6 e" z* b0 g
你可在这一行,下A命令(进入小汇编状态),然后可输入你的正确的汇编代码,你在这可改为:jne 000406679 ' h; T/ c' B; r" z: o! n8 K
但TRW2000 demo版,此命令不能用,你可用SOFTICE来完成这工作。
- r+ Y" l* M( C% j0 e v但我推荐你可在这一行,在TRW2000或SOFTICE下命令:r fl z 2 R6 M' A6 P7 w8 M) k
这样就可改变跳转指令。 $ i( O, k5 y7 u( b! q# l4 A
fl是标志寄存器,r命令修改此寄存器相关的值,具体参考SOFTICE手册和汇编书籍。 4 c# b9 R) R9 @4 q8 V
在win32dasm中不能改变程序代码,你可用16进制工具来完成,推荐用hiew来完成。
- ^: M% ]* |5 G②也可以在trw中,用鼠标移动到愈修改代码出,直接修改,如75变74,即jnz->jz
! e: w( k, k1 F2 p$ e
5 ?0 K& R* S2 Z( Q' v* F# f③在trw中,下命令e adress [欲修改之代码] x6 ]' ^2 a# c4 K1 k
14、问:在汇编语言中,"[]"的用法?如: " Y, M# i; {/ d9 Z+ L G, h5 R
1、push dword ptr [024c1100] ' {) U( _: b' N& Z8 f0 r; W
2、cmp eax,[ebp+14]
4 L& J1 a* Q7 T& q; L# h7 t3、cmp byte ptr [eax],46
8 L9 b1 u% V0 d9 G4、lea eax,[edx-02]
/ x; ^/ ~# |! d$ [( d9 X1 p1 c5、mov ecx,[edx+08] / ~: A- z% v/ B7 g4 e
其中"[]"里的内容,什么时候表示的是值,什么时候表示的是地址,为什么?第4个是不是把"edx-02"的值作为地址送给eax???
5 ]8 W T R9 K+ ~# C' w另一个问题是:我发现在soft-ice中,在寄存器区(即最上面的那个区,标志位下面)的右下脚有一个类似:"ds:xxxxxxxx=xxxxxxxx"的字样,时隐时现,并不断变化,不知是干什么用的,请指教,不胜感激!!!!!!!!
: [6 n, _. q \7 N答:
% ]4 w& v I) a; s1 ?3 ~①右下角显示的那个是当前指令要操作的内存的地址及内容 。# ]4 S; q" C D- O. z
lea指令表示取有效地址,第4个是把"edx-02"的值送给eax。 0 {' g7 b% V) {# { w5 H M
②
9 U9 {& Y) j2 S6 n3 q: A, v1,压栈024c1100值的双字 8 T6 Q" C: x& L Y
2,eax-ebp+14的有效值,不保留值,主要看标志位。
/ N" S2 G, p) t1 Q+ a# l3,字节型eax-46,看标志位 ' C, m8 F% o' [9 v/ l
4,把edx-02的有效值给eax ; L' B( G; j8 m
5,edx+8处值作为地址,此地址的值给ecx 6 `. z m; m6 I- A- u
15、问:能否推荐几本书?
& r$ p# Z6 z! p3 f2 w- Y% x9 X9 x( b答:
) A3 j/ \9 _) J( s u0 g1、《Win95系统编程奥秘》在这里:http://www.multimania.com/mpietreks2/ ! h; M7 d# {( g$ d2 ^+ t9 c- _( n7 L
2、《Thinking in C++》:http://www.bruceeckel.com/ThinkingInCPP2e.html 3 K8 F& l8 }" G+ f
3、《Art of ASM》简直是汇编大全,http://win32asm.cjb.net或 http://personales.com/eeuu/arizona/Aesculapius/ebooks.html 或http://huizen.dds.nl/~books/。 9 [ t( l2 I( W) C1 b3 R, a- a7 D
4、 http://proxy.spaceproxy.com/-_-http://personales.com/eeuu/arizona/Aesculapius/files.html 0 W0 `- u# t5 D3 s
5、
/ j: i! o7 t$ R1 g# E0 S9 G- w16、问:我是初学者。用softice拦下后。f12转到那个领空。但那个领空有什么特征?怎样看?我不明白。 以hiew为例。我试了很多次。f12从头按到尾都看不到哪里标着hiew的。 : |5 Z/ \# A q5 }; V
答:你换个图形界面的windows程序试试,不要用hiew,f12并不是转到那个领空,F12是跳出子程序,如:
4 D9 e5 E, \; L" v& m/ X5 l& rmov eax,1
: B' |1 H' A0 g& M; Uinc eax
9 R6 x& y+ Q% t' N1 S9 zret---------你在这段程序中按F12,就跳出此子程序,从RET处返回到上一程序中去。你如多按F12就等于跳出多个子程序,其实你用F10也能达到这一目的,F10来到inc eax,再按F10,执行RET一行,结果和你按F12一样的,只是F12更省事。
9 g1 [' A0 t- O8 l: q+ Z领空是一形象说法,说明SOFTICE目前调试的程序代码是哪个程序的,一般会在SOFTICE屏幕下的三分之一处会有一光条线,中间有文件名,如:
! L s) ~9 C. v; R* R------------------------ACDSEE!CODE+???------------------------ * t1 K, C2 l" o% o" |, W! g0 Q
这表明目前SOFTICE是在ACDSEE程序的代码处,是ACDSEE.EXE不是ACDSEE.DLL就不知了,要具体分析
& c; [& x+ @; s# Z9 c/ a
% r9 j2 _, @% { N0 f |