首页
社区
课程
招聘
[旧帖] [分享]汇编学习心得〖更新中〗 0.00雪花
发表于: 2007-7-16 11:32 5217

[旧帖] [分享]汇编学习心得〖更新中〗 0.00雪花

2007-7-16 11:32
5217
标 题: 【分享】汇编学习心得
作 者: popeylj
时 间: 2007-07-16
链 接: http://bbs.pediy.com/showthread.php?p=335050#post335050

声明:本文中用的工具都是我用过的一些,所以大家不要拘泥于工具,毕竟工具是死的,人是活的:) 大家根据自己的喜欢使用

本笔记仅供新手入门,大虾跳过:) 看雪给了我很多的帮助,也是我投桃报李的时候了:) 这里面有借鉴别人的东西 ,择而学之OK ,正体:
学习破解:
[初级阶段]
初级知识积累过程:

一些常用命令:
--------------------------------------------------------------------------------
跳转命令

--------------------------------------------------------------------------------

根据条件作出是否跳转的决定,通常前面会有一个判断语句,例如:
CMP AX,BX
JZ XX
上面两条命令意为用AX减BX,它的值如果为0则跳转到XX的标号行.
常用的跳转命令有:

JZ/JE                 相等或为零为则跳转
JNZ/JNE         不相等或不为零则跳转
JL/JLE                 小于/小于或等于则跳转
JG/JGE                 大于/大于或等于则跳转
JMP                 无条件跳转

--------------------------------------------------------------------------------
比较语句

--------------------------------------------------------------------------------
CMP AX,BX AX                寄存器减去BX寄存器的内容
AND AX,BX AX                与BX做"与运算"
OR AX,BX AX                与BX做"或运算"
TEST AX,BX                 与 AND AX,BX 命令有相同效果
XOR AX,AX                 使AX的内容清零,每个寄存器与自己作异或运算等于清零动作.

--------------------------------------------------------------------------------
子程式

--------------------------------------------------------------------------------
一个子程的模样长得像这个样子
CALL 15F:334422
子程式是个很重要的概念,它是主程式的一个分支,用来做特定动作.
打个比方: 你要上班,先你是走路到车站,然后上车,然后下车,然后走到自己的办公室.
这里如果要把上班编为一段程式的话,那么就可以把"走路","搭车","走到办公室"做为分支程式来处理.
说得再通俗一点就是: 你要破解的程式不可能就是一条主程式到底,肯定会呼叫下面的子程式,由子程式来处理你发送的注册信息,然后比较,然后标记是否注册正确,这些都是靠它来完成的.
所以说,破解的关键在于,你找准程式在哪儿将会作注册判断,并进入那个注册子程式,仔细观察,你就成功了.子程式的返回码是 RET

--------------------------------------------------------------------------------
算术运算

--------------------------------------------------------------------------------
ADD AX,BX                 加法运算 AX=AX+BX
SUB AX,BX                 减法运算 AX=AX-BX
INC AX                         寄存器加一 AX=AX+1
DEC AX                         寄存器减一 AX=AX-1
MUL                         乘法运算
DIV                        除法运算

--------------------------------------------------------------------------------
数据操作

--------------------------------------------------------------------------------
MOV AX,BX                 数据传送指令,将BX的值移送到AX中
XCHG AX,BX                 将AX与BX的值互换

这些是基本的常识,接下来最好是找个crackme来练习,要简单点的,就是那种找错误字符串,然后验证过程就在它附近的。可以让你快速的上手,不管是命令还是工具,毕竟枯燥的命令不如你上机实践5分钟。动手,一定要动手!

工具使用:
                从ABOUT入手
工具:W32dasm89,Hiew601

对象:Hex Workshop 2.51

第一步:运行hworks32.exe

第二步:点击HELP,然后点ABOUT HEX WORKSHOP...

第三步:随便输入几个字符以得到它的错误信息(请赶紧用笔记下来),然后离开程序.

第四步:进入HWS目录.

第五步:将HWORKS32.EXE复制两份分别命名为HWORKS32.EXX及1.EXE.

第六步:运行W32DASM并且将1.EXE反汇编.

第七步:一旦它被反汇编,点击FIND TEXT按钮,输入刚才记下的信息"You have entered an", 然后寻找.(注意,这个字符串在string data reference窗口中是找不到的)

第八步:现在你应该看到下面这几行:

Name: DialogID_0075, # of Controls=003, Caption:"Registration Unsucce..

001-ControlID:FFFF, Control Class:""Control Text:"You have entered an..

002-ControlID:FFFF, Control Class:""Control Text:"Please confirm you..

第九步:现在你已经知道提示你注册码错误的窗口的CONTROLID了.点击FIND TEXT,输入 "dialogid_0075"直到你找到:

* Possible reference to DialogID_0075

:0041E233 6A75 push 00000075

:0041E235 8D8D10FFFFFF lea ecx, dword ptr [ebp+FF10]

第十步:还是老办法.从这行开始向上找,一直找到有如下命令时为止:cmp,jne,je等等.

:0041E145 837DEC00 cmp dword ptr [ebp-14], 00000000

:0041E149 0F8479000000 je 0041E1C8

:0041E14F 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FEFC]

第十一:找到了!如果将上面那句JE改成JNE会怎么样呢?! 将光条移到:0041E149 0F8479000000 je 0041E1C8上,然后记下它的偏移地址(窗口底部), 这里是@offset 0001d549h.

第十二:进入DOS窗口,运行HIEW HWORKS32.EXE,按F4,选择DECODE MODE,按F5,输入1D549.

0001D549: 0F847900 je 00001D5C6 ---------- (1)

0001D54D: 0000 add [bx][si],al

0001D54F: 8B8DFCFE mov cx,[di][0FEFC]

第十三:这应该是修改的地方吧. ;-)) 按F3,输入0F85,按F9将修改存盘.离开HIEW.

第十四:运行HWORKS32.EXE,输入任意几个注册码,成功了吧?NO!!!??? 不要紧,一定是哪里出问题了. ;-) 进入DOS窗口,将HWORKS32.EXX复制为HWORKS32.EXE, 幸好我们先备份了一下. ;-) 回到W32DASM窗口,让我们再试试吧.

第十五:按F3再寻找一次"dialogid_0075",你应该可以找到:

* Possible reference to DialogID_0075

:00430ADD 6A75 push 00000075

:00430ADF 8D8D10FFFFFF lea ecx, dword ptr [ebp+FF10]

第十六:对了对了,从这行开始向上找,一直找到cmp,jne,je等等此类命令为止:

:004309EF 837DEC00 cmp dword ptr [ebp-14], 00000000

:004309F3 0F8479000000 je 00430A72

:004309F9 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FEFC]

第十七:这次找到的对不对呢?试试吧!把光条移到:004309F3 0F8479000000 je 00430A72. 记下它的偏移地址: @Offset 0002FDF3h.

第十八:进入DOS窗口,运行HIEW HWORKS32.EXE,按F4选择DECODE MODE,按F5然后输入2FDF3:

0002FDF3: 0F847900 je 00001D5C6 ---------- (1)

0002FDF7: 0000 add [bx][si],al

0002FDF9: 8B8DFCFE mov cx,[di][0FEFC]

第十九:这应该就是修改的地方了.按F3,输入0F85,按F9将修改存盘.离开HIEW.

第二十:再运行一次HWORKS32.EXE,随便输入几个注册码,怎么样?成功了!!!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 134
活跃值: (84)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=;]...[/QUOTE]
没必要把破解步骤分的这么细吧,会固化思想的。
2007-7-16 15:35
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
呵呵,只是给新人一个模式,建议,仅仅建议,因为开始的时候往往是茫然的。
2007-7-16 16:05
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
其实随意一些就行,工具选自己觉得顺手的就行了。
2007-7-16 16:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵
顶了 希望多多发帖
2007-7-16 18:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对于我这样的初学者就有必要这样细 支持楼主
2007-7-16 19:33
0
雪    币: 347
活跃值: (30)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
7
看了楼主写的东西,感觉不错,就是有点死板,不一定非要用哪个工具,可以变换的,希望连载的时候可以多变通变通,这样不至于和2楼说的一样:固化思想,还有就是尽量多讲点汇编,不要一上来就搞壳子,或者要搞某某Crack Me或者搞某某软件,这样并不见得比多上两天汇编课强,我也是通过最近的学习才知道汇编对于破解是多么的重要,所以就罗唆了这么多,希望露主不要嫌我烦哈
2007-7-16 23:59
0
游客
登录 | 注册 方可回帖
返回
//