Author:0x0F@0xsec
From:0xsec.org
Vulnerability Details:
sid变量未经过过滤 产生SQL注射。
Exploits:
http://site/plugin.php?id=huxhall:huxhall&sid=1
KeyWords:inurl:huxhall:huxhall
Related companies:乐游网 HappyYux.com
Repair Methods:过滤
Has patch:No
测试的时候看了看 发现的
没有时间给你们做详细分析和利用了
你们懂的。
由于程序员对变量过滤不慎,可能导致其他同来源插件 也存在漏洞。
From:0xsec.org
Vulnerability Details:
sid变量未经过过滤 产生SQL注射。
Exploits:
http://site/plugin.php?id=huxhall:huxhall&sid=1
KeyWords:inurl:huxhall:huxhall
Related companies:乐游网 HappyYux.com
Repair Methods:过滤
Has patch:No
测试的时候看了看 发现的
没有时间给你们做详细分析和利用了
你们懂的。
由于程序员对变量过滤不慎,可能导致其他同来源插件 也存在漏洞。
浙江省于2月16日起招考135名紧缺职位公务员,招考专业涉及城市规划、网络安全、国际商法究等。记者注意到其中网络安全职位需求人数最多,达40人之多。
根据2011年浙江省各级机关紧缺职位公务员录用计划一览表 ,网络安全职位招考单位有浙江省专用通信局、杭州住房公积金管理中心、杭州市公安局及六城区分局、温州市档案局、温州市公安局等单位,学历要求均为网络安全专业硕士。
杭州市公安局网络安全职位招考要求考生熟练掌握注入,嗅探,缓冲区溢出等网络攻防技术,会灵活运用各种攻防工具和渗透工具。了解各类渗透技术的手法和思维方式,能独立分析渗透事件。
“这简直就是在招黑客”,杭州市计算机信息网络安全协会副秘书长孙林这样评价。他认为这和目前的网络安全形势有关。
孙林透露目前互联网的网络安全问题已经从已经从病毒感染等物理安全为主演变为信息内容安全为主,从黑客没有商业目的的斗智个案演变为一个以利益为导向的产业链,从最早的病毒出售演变为提供完整解决方案,而其中不少涉及法律问题,如网页篡改、计算机病毒、系统非法入侵、数据泄密、网站欺骗、服务瘫痪、漏洞非法利用等信息安全事件时有发生。
根据最新《中国互联网络发展状况统计报告》,2010年遇到过病毒或木马攻击的网民比例为45.8%,有过账号或密码被盗经历的网民占21.8%人数达9969万。同时报告也指出,目前国内“钓鱼网站”泛滥,亟需通过一个权威的网站认证体系来规范和树立业内标准。
杭州市计算机信息网络安全协会副秘书长孙林认为浙江招聘黑客级的网络高手确有现实针对性,但他认为符合要求的人才非常稀缺,因为在目前大学教育中虽有网络攻防技术这样课程,但要熟练掌握实非易事。
孙德良毕业于沈阳工业大学计算机专业,现在是A股第一家互联网上市企业网盛生意宝的董事长,他认为目前互联网已经从信息交流工具演变为各种势力博弈之地,但大学互联网研究和教育明显落后于现实,所以造成了网络安全人才的紧缺。
记者注意到,网络安全职位在去年浙江省各级机关紧缺职位公务员招考中也比较突出,73名中网络安全职位占8名。
杭州市计算机信息网络安全协会副秘书长孙林同时也认为,政府机关也可以和专业安全公司合作的方式以缓解人才之缺,这方面专业公司已经具备了丰富经验。
根据2011年浙江省各级机关紧缺职位公务员录用计划一览表 ,网络安全职位招考单位有浙江省专用通信局、杭州住房公积金管理中心、杭州市公安局及六城区分局、温州市档案局、温州市公安局等单位,学历要求均为网络安全专业硕士。
杭州市公安局网络安全职位招考要求考生熟练掌握注入,嗅探,缓冲区溢出等网络攻防技术,会灵活运用各种攻防工具和渗透工具。了解各类渗透技术的手法和思维方式,能独立分析渗透事件。
“这简直就是在招黑客”,杭州市计算机信息网络安全协会副秘书长孙林这样评价。他认为这和目前的网络安全形势有关。
孙林透露目前互联网的网络安全问题已经从已经从病毒感染等物理安全为主演变为信息内容安全为主,从黑客没有商业目的的斗智个案演变为一个以利益为导向的产业链,从最早的病毒出售演变为提供完整解决方案,而其中不少涉及法律问题,如网页篡改、计算机病毒、系统非法入侵、数据泄密、网站欺骗、服务瘫痪、漏洞非法利用等信息安全事件时有发生。
根据最新《中国互联网络发展状况统计报告》,2010年遇到过病毒或木马攻击的网民比例为45.8%,有过账号或密码被盗经历的网民占21.8%人数达9969万。同时报告也指出,目前国内“钓鱼网站”泛滥,亟需通过一个权威的网站认证体系来规范和树立业内标准。
杭州市计算机信息网络安全协会副秘书长孙林认为浙江招聘黑客级的网络高手确有现实针对性,但他认为符合要求的人才非常稀缺,因为在目前大学教育中虽有网络攻防技术这样课程,但要熟练掌握实非易事。
孙德良毕业于沈阳工业大学计算机专业,现在是A股第一家互联网上市企业网盛生意宝的董事长,他认为目前互联网已经从信息交流工具演变为各种势力博弈之地,但大学互联网研究和教育明显落后于现实,所以造成了网络安全人才的紧缺。
记者注意到,网络安全职位在去年浙江省各级机关紧缺职位公务员招考中也比较突出,73名中网络安全职位占8名。
杭州市计算机信息网络安全协会副秘书长孙林同时也认为,政府机关也可以和专业安全公司合作的方式以缓解人才之缺,这方面专业公司已经具备了丰富经验。
在搜索框里,我们输入一个关键词,该关键词必须在这个站能搜索到信息。比如这个站,我输入了1,搜索到了很多新闻。
判断这个搜索框是否有注入漏洞。
我们在搜索框内输入1%' and 1=1 and '%'='
返回正常
我们在搜索框内输入1%' and 1=2 and '%'='
返回异常
对不起,没有找到相关新闻
可以确定这是个注入点了
我们在搜索框里,搜索关键词1浏览器地址栏显示:http://www.XXXXXX.com/News_search.asp?key=1&otype=msg
这里的key=1,就是说我们搜索得关键词1。我们要做的就是吧key=1放到最后面,把连接变成
http://www.XXXXXX.com/News_search.asp?otype=msg&key=1,或者直接把&otype=msg删除,变成http://www.XXXXXX.com/News_search.asp?key=1
拿工具来挂进去就可以了
判断这个搜索框是否有注入漏洞。
我们在搜索框内输入1%' and 1=1 and '%'='
返回正常
我们在搜索框内输入1%' and 1=2 and '%'='
返回异常
对不起,没有找到相关新闻
可以确定这是个注入点了
我们在搜索框里,搜索关键词1浏览器地址栏显示:http://www.XXXXXX.com/News_search.asp?key=1&otype=msg
这里的key=1,就是说我们搜索得关键词1。我们要做的就是吧key=1放到最后面,把连接变成
http://www.XXXXXX.com/News_search.asp?otype=msg&key=1,或者直接把&otype=msg删除,变成http://www.XXXXXX.com/News_search.asp?key=1
拿工具来挂进去就可以了
完美时空周边商城 用的是ECSHOP, 其实EC漏洞蛮多的。
注射出帐号密码admin:9ff5c6d74f5efa31265e1c2f45e14349
后台默认admin
但是无奈MD5破解不出来。!
我用http://ip.wen.la/ip.jsp?q=shop.wanmei.com&x=32&y=14
查询到该服务器绑定了很多官方网站。 不知道是不是准确
包括旗下的:
《热舞派对》官方网站
《诛仙》 《诛仙2》
《完美世界》官方网站
《武林外传》官方网站
《赤壁》官方网站
《热舞派对》官方论坛
《口袋西游》官方
《完美国际》官方网站
《神鬼传奇》官方网站
等诸多大型网站。!
已经通知厂家! 漏洞还未修补,请勿破坏!
form:xiaokis
注射出帐号密码admin:9ff5c6d74f5efa31265e1c2f45e14349
后台默认admin
但是无奈MD5破解不出来。!
我用http://ip.wen.la/ip.jsp?q=shop.wanmei.com&x=32&y=14
查询到该服务器绑定了很多官方网站。 不知道是不是准确
包括旗下的:
《热舞派对》官方网站
《诛仙》 《诛仙2》
《完美世界》官方网站
《武林外传》官方网站
《赤壁》官方网站
《热舞派对》官方论坛
《口袋西游》官方
《完美国际》官方网站
《神鬼传奇》官方网站
等诸多大型网站。!
已经通知厂家! 漏洞还未修补,请勿破坏!
form:xiaokis
前言:
写这篇文章出于个人兴趣,要先声明的是本人能力是非常有限!其中参考了许多文章!由于无法提供更多的信息教程,所以文章题目才叫做"给新手引路 之 浓缩汇编基础"。主要讲的是破解中所要的一些汇编知识,方便新手们理解,我将用比较通俗的语言讲述!希望大家别说我"低级" - -b
写此文的理由:
1、出于兴趣
2、助于自己学习巩固,利于新手
注:
本文并不教如何编写汇编程序,只想引新手们进Crack大门,一些迟迟无法Crack成功的人也就是这个原因了!
最好是能抛砖引玉了,勾起新手们学习汇编的兴趣!
重要一点是:不懂汇编是完全没办法搞Crack的,希望大家带着这点来学习!
-----------------------------------------------------------------------------------------------
1.0 关于汇编语言
汇编语言是创造出来代替原始的只能由处理器理解的二进制代码的,也就是在OD中常见的机器码!用机器码来写程序,可以想象其难度吧,所以汇编语言就出现了,汇编代码是直接描述处理器可以执行的代码,也就是在OD中最常见的反汇编代码了!(当然,有点不一样),而汇编语言是和cpu相关的,和机器语言是一一对应的!
2.0 关于cpu
CPU的任务就是执行存放在存储器里的指令序列。为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O之间的数据传送任务。早期的CPU芯片只包括运算器和控制器两大部分。到了近几年,为了使存储器速度能更好地与运算器的速度相匹配,又在芯片中引入了高速缓冲存储器(知道为什么P4比P4赛扬贵那么多了吧?)。
看主要的部件:
1.算术逻辑部件ALU(arithmetic logic unit)用来进行算术和逻辑运算。这部分与我们的关系不太大,我们没必要管它。
2.控制逻辑。同样与我们的关系不大。
3.工作寄存器。意识了吧,寄存器呀!喂,,寄存器呀!~
3.0 寄存器
所要了解的是8个32位的寄存器,分别是eax,ebx,ecx,edx,esp,ebp,edi,esi
eax-edx这四个是通用寄存器,虽然各个都有各自的用途,不过你可以用它们来做任何事!是32位的,自然有低位和高位,我们又可以通过 ax,bx,cx,dx来访问其低十六位,但高十六位是无法访问的!比如eax=12345678h,那么低十六位ax=5678h!而十六位的自然也有低位和高位,不过高八位是可以访问的,如ax可以分为ah和al,看字面就知道,ah(high)高八位,al就为低八位了!前面的例子,ax=5678h,那么ah=56h,al=78h!这四个寄存器主要是用来暂放计算结果或什么什么的!
esp-esi这四个主要是寻址时用来存放偏移或指针,所以,也就称为指针寄存器或变址寄存器了~如在OD中看到的[eax],其实eax中存放的是一个内存地址,而实际要访问的是那个内存地址里的内容!
esp(堆栈指针寄存器):
很重要的一个概论,堆栈有着先进后出的特点,就好像有一个圆柱形的筒子,该直径刚好是一个乒乓球的直径,所以最先放进去的球当然会最后出来.而esp呢, 永远是指着最顶的那个球的,也就是永远都指向栈顶!在od中也很常见了,比如push和pop就是对栈的操作,push把一个数据压入栈中,也就是把一个球放进去,再去调用push时就再放进一个,而esp则指向第二个放进去的那个球了!使用pop呢就从栈中弹出一个数据,前面说了,堆栈有着先进后出的特点,所以用pop呢就从最后放进去的那个球先出了(除非你破坏筒子(破坏堆栈?那是不可能的,程序马上死给你看))!而esp还是指向栈顶!
取个代码例子:
(1) mov ecx, 100<---------100传入ecx
(2) mov eax, 200<---------200传入eax
(3) push eax <------------ecx先进了
(4) push ecx<-------------再来是eax
(5) pop ebx<--------------从栈顶取出一个,也是最后进去的那一个,结果存到ebx
(6) pop ecx<--------------从栈顶取出一个,也就是刚刚先进去的那个了,结果存到ecx
最后ebx=200,ecx=100
到了win32的平台下,api大家都知道了吧!api的参数都是靠堆栈来传递的,比如说一个FindWindow,在C里我这样调用
->::FindWindow(NULL,"a")->而反汇编之后在系统底层反汇编代码就象这个样子:
push xxxxxxxx->xxxxxxxx为"a"的内存地址
push yyyyyyyy->yyyyyyyy为空中止字符串的指针
call zzzzzzzz->调用FindWindow
而在call里面先使用pop弹出先前压入栈的参数再使用
ebp(基址指针寄存器):
它称为基址指针寄存器,它们都可以与堆栈段寄存器SS(堆栈段)联用来确定堆栈中的某一存储单元的地址,ESP用来指示段顶的偏移地址,而EBP可作为堆栈区中的一个基地址以便访问堆栈中的信息。
ESI(源变址寄存器)和EDI(目的变址寄存器)一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能,可以很方便地用于变址。
还有两个专用寄存器,分别是eip和flags
flags:
这个是标志寄存器了,存放条件标志码、控制标志和系统标志的寄存器!在od中也见很多了,比如zf(零标志),用cmp比较时,把两个操作数相减,为0就置zf为1,否则zf为0。而jnz就是看zf是否为0,为0就跳!这样说起来似乎更乱了,建议大家去记那些大于就跳,小于就跳的,比较简单(jnz就是不相等就跳)``哦呵呵!!至于其它标志,这里不再阐述了,可以去参看汇编速查!
cmp eax,ebx<-比较eax和ebx,两个相减,为0的话zf就为一,否则zf为0
jnz xxxxxxx<-判断zf是否为0,为0就跳到xxxxxxx处,也就是所谓的不相等就跳
eip(指令指针寄存器):
这个很好理解,根据od来说,载入一个程序后,比如代码像这样:
0043C412 >/$Content$nbsp; 55 push ebp <-载入后停在这,看寄存器窗口eip这时为43c412
0043C413 |. 8BEC mov ebp, esp <-f8运行一步之后,eip为43c413
0043C415 |. 6A FF push -1 <-eip为43c415
0043C417 |. 68 C8B64800 push 0048B6C8 <-eip为43c417
有人会说"原来eip是指示当前执行到代码处的地址的!" ,这不对!!因为f8运行还没通过那条代码,所以还不算已经执行了,没错,eip指向的就是下一条将要执行的指令的指针!
段寄存器:
cs代码段,ds数据段,ss堆栈段,es附加段
在Win32编程中段的概念已经不重要了!而在Crack时你总不会是在调是dos时代的程序吧!-!
4.0 常用汇编指令
mov ax,cx <-很常用了,把cx的值送入ax中,cx值保持不变
cmp eax,ecx<-很常见了吧,比较eax和ecx,置标志位!方法前面说过了
xor eax,eax<-看这个,eax与自己异或,是清零的操作!
lea eax,str<-并不传送数据,只传送该数据的地址,将str字符串的地址传到eax
push eax <-进栈操作,前面说过了,eax进栈
pop ebx <-出栈操作,前面也说了,弹出位于栈顶的数据存入ebx
ADD 加法指令 格式:ADD DST,SRC 执行的操作:(DST)<-(SRC)+(DST)
SUB 减法指令 格式:SUB DST,SRC 执行的操作:(DST)<-(DST)-(SRC)
MUL 无符号乘法指令 格式: MUL SRC 执行的操作:字节操作(AX)<-(AL)*(SRC);字操作(DX,AX)<-(AX)*(SRC);双字操作:(EDX,EAX)<- (EAX)*(SRC)
DIV 无符号除法指令 格式:DIV SRC 执行的操作:字节操作:16们被除数在AX中,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中 。表示为:
(AL)<-(AX)/(SRC)的商,(AH)<-(AX)/(SRC)的余数。字操作:32位被除数在DX,AX中。其中DX为高位字,16位除数为源操作数,结果的16 位商 在AX中,16位余数在DX中。表示为:(AX)<-(DX,AX)/(SRC)的商,(DX)<-(DX,AX)/(SRC)的余数。
nop <- 无操作,去掉指令用的吧!去掉一个跳转,让程序直接往下走,就到注册成功处啦(扯远了````)
call <- 调用子程序或函数用的
关于跳转指令,可以查看汇编速查手册,别强迫自己把所有的都一下记住,浪费精力,不懂时再查一下,久了就记住了!
5.0 高级语言程序的汇编浅解析
汇编语言要和硬件直接打交道,写病毒是方便点啦!!而在高级语言中,如C中我们要面向的是问题的解决,对于硬件资源操作,编译器搞定了!在这里稍微讲一下高级语言中与反汇编代码相应的一些地方:
1、定义变量
int a;
一个变量其实是存放在一个内存地址里,如果对a进行赋值"a=10",在反汇编中就有可能表现为:
mov word ptr[007e58c2],A
像这个样子,而a所对应的内存地址就是0x007e58c2了,当然是乱写的一个地址而已,系统怎样分配?(天知道...)
2、比如一个数组
char str[]="hello";
占用了6个字节,最后一个是以0结尾的空字节,数组名可以当做数组的指针!str[0]='h',str[0]相应一个变量地址,比如为[0040e123],那么[0040e124]就为'e',[0040e125]就为'l'....了`
3、指针
char *p;
指针也是一个变量,所以它也对应一个内存地址!但访问时应该是访问其指向的内存地址的内容,而不是这个指针变量的内容,其内容只是一个地址而已!假如该指针变量地址为007e1000,那么语句p=a,这句在高级语言里是让指针p指向a这个内存单元!p里的内容是a的地址,*p实际上是a的内容了!而反汇编有可能表现成这样:
mov [007e1000],007e2000<-假如007e2000为变量a的地址,那么就是把a的地址传到007e1000这个内容里了!
4、函数调用
sub(a,b);
假如sub是自定义的一个减法函数,作用为参数一减去参数二,上面语句为在C中调中时传递参数!前面有说过了,Win32平台下函数调用的参数是通过堆栈来传递的,那么反汇编就是:
(假如a=2,b=1)
mov eax,2
mov ebx,1
push eax
push ebx
call 取地址(sub)
.......
-----------------------------------------------------------------------------------------------
好了,最后感谢大家能看完这篇了了草草的东西,我也回顾了不少知识!在本人能力范围内的事不知道对新手们有没有帮助,还有一点要提醒各位新手,如果真想学好Crack学通Crack这门知识的话,不完全了解汇编是不行的!所以在看了我这篇之后如果能激起你学汇编的信心是最好的!要不等到Crack遇到什么问题时才再想回过头学汇编,那很难!~
写这篇文章出于个人兴趣,要先声明的是本人能力是非常有限!其中参考了许多文章!由于无法提供更多的信息教程,所以文章题目才叫做"给新手引路 之 浓缩汇编基础"。主要讲的是破解中所要的一些汇编知识,方便新手们理解,我将用比较通俗的语言讲述!希望大家别说我"低级" - -b
写此文的理由:
1、出于兴趣
2、助于自己学习巩固,利于新手
注:
本文并不教如何编写汇编程序,只想引新手们进Crack大门,一些迟迟无法Crack成功的人也就是这个原因了!
最好是能抛砖引玉了,勾起新手们学习汇编的兴趣!
重要一点是:不懂汇编是完全没办法搞Crack的,希望大家带着这点来学习!
-----------------------------------------------------------------------------------------------
1.0 关于汇编语言
汇编语言是创造出来代替原始的只能由处理器理解的二进制代码的,也就是在OD中常见的机器码!用机器码来写程序,可以想象其难度吧,所以汇编语言就出现了,汇编代码是直接描述处理器可以执行的代码,也就是在OD中最常见的反汇编代码了!(当然,有点不一样),而汇编语言是和cpu相关的,和机器语言是一一对应的!
2.0 关于cpu
CPU的任务就是执行存放在存储器里的指令序列。为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O之间的数据传送任务。早期的CPU芯片只包括运算器和控制器两大部分。到了近几年,为了使存储器速度能更好地与运算器的速度相匹配,又在芯片中引入了高速缓冲存储器(知道为什么P4比P4赛扬贵那么多了吧?)。
看主要的部件:
1.算术逻辑部件ALU(arithmetic logic unit)用来进行算术和逻辑运算。这部分与我们的关系不太大,我们没必要管它。
2.控制逻辑。同样与我们的关系不大。
3.工作寄存器。意识了吧,寄存器呀!喂,,寄存器呀!~
3.0 寄存器
所要了解的是8个32位的寄存器,分别是eax,ebx,ecx,edx,esp,ebp,edi,esi
eax-edx这四个是通用寄存器,虽然各个都有各自的用途,不过你可以用它们来做任何事!是32位的,自然有低位和高位,我们又可以通过 ax,bx,cx,dx来访问其低十六位,但高十六位是无法访问的!比如eax=12345678h,那么低十六位ax=5678h!而十六位的自然也有低位和高位,不过高八位是可以访问的,如ax可以分为ah和al,看字面就知道,ah(high)高八位,al就为低八位了!前面的例子,ax=5678h,那么ah=56h,al=78h!这四个寄存器主要是用来暂放计算结果或什么什么的!
esp-esi这四个主要是寻址时用来存放偏移或指针,所以,也就称为指针寄存器或变址寄存器了~如在OD中看到的[eax],其实eax中存放的是一个内存地址,而实际要访问的是那个内存地址里的内容!
esp(堆栈指针寄存器):
很重要的一个概论,堆栈有着先进后出的特点,就好像有一个圆柱形的筒子,该直径刚好是一个乒乓球的直径,所以最先放进去的球当然会最后出来.而esp呢, 永远是指着最顶的那个球的,也就是永远都指向栈顶!在od中也很常见了,比如push和pop就是对栈的操作,push把一个数据压入栈中,也就是把一个球放进去,再去调用push时就再放进一个,而esp则指向第二个放进去的那个球了!使用pop呢就从栈中弹出一个数据,前面说了,堆栈有着先进后出的特点,所以用pop呢就从最后放进去的那个球先出了(除非你破坏筒子(破坏堆栈?那是不可能的,程序马上死给你看))!而esp还是指向栈顶!
取个代码例子:
(1) mov ecx, 100<---------100传入ecx
(2) mov eax, 200<---------200传入eax
(3) push eax <------------ecx先进了
(4) push ecx<-------------再来是eax
(5) pop ebx<--------------从栈顶取出一个,也是最后进去的那一个,结果存到ebx
(6) pop ecx<--------------从栈顶取出一个,也就是刚刚先进去的那个了,结果存到ecx
最后ebx=200,ecx=100
到了win32的平台下,api大家都知道了吧!api的参数都是靠堆栈来传递的,比如说一个FindWindow,在C里我这样调用
->::FindWindow(NULL,"a")->而反汇编之后在系统底层反汇编代码就象这个样子:
push xxxxxxxx->xxxxxxxx为"a"的内存地址
push yyyyyyyy->yyyyyyyy为空中止字符串的指针
call zzzzzzzz->调用FindWindow
而在call里面先使用pop弹出先前压入栈的参数再使用
ebp(基址指针寄存器):
它称为基址指针寄存器,它们都可以与堆栈段寄存器SS(堆栈段)联用来确定堆栈中的某一存储单元的地址,ESP用来指示段顶的偏移地址,而EBP可作为堆栈区中的一个基地址以便访问堆栈中的信息。
ESI(源变址寄存器)和EDI(目的变址寄存器)一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能,可以很方便地用于变址。
还有两个专用寄存器,分别是eip和flags
flags:
这个是标志寄存器了,存放条件标志码、控制标志和系统标志的寄存器!在od中也见很多了,比如zf(零标志),用cmp比较时,把两个操作数相减,为0就置zf为1,否则zf为0。而jnz就是看zf是否为0,为0就跳!这样说起来似乎更乱了,建议大家去记那些大于就跳,小于就跳的,比较简单(jnz就是不相等就跳)``哦呵呵!!至于其它标志,这里不再阐述了,可以去参看汇编速查!
cmp eax,ebx<-比较eax和ebx,两个相减,为0的话zf就为一,否则zf为0
jnz xxxxxxx<-判断zf是否为0,为0就跳到xxxxxxx处,也就是所谓的不相等就跳
eip(指令指针寄存器):
这个很好理解,根据od来说,载入一个程序后,比如代码像这样:
0043C412 >/$Content$nbsp; 55 push ebp <-载入后停在这,看寄存器窗口eip这时为43c412
0043C413 |. 8BEC mov ebp, esp <-f8运行一步之后,eip为43c413
0043C415 |. 6A FF push -1 <-eip为43c415
0043C417 |. 68 C8B64800 push 0048B6C8 <-eip为43c417
有人会说"原来eip是指示当前执行到代码处的地址的!" ,这不对!!因为f8运行还没通过那条代码,所以还不算已经执行了,没错,eip指向的就是下一条将要执行的指令的指针!
段寄存器:
cs代码段,ds数据段,ss堆栈段,es附加段
在Win32编程中段的概念已经不重要了!而在Crack时你总不会是在调是dos时代的程序吧!-!
4.0 常用汇编指令
mov ax,cx <-很常用了,把cx的值送入ax中,cx值保持不变
cmp eax,ecx<-很常见了吧,比较eax和ecx,置标志位!方法前面说过了
xor eax,eax<-看这个,eax与自己异或,是清零的操作!
lea eax,str<-并不传送数据,只传送该数据的地址,将str字符串的地址传到eax
push eax <-进栈操作,前面说过了,eax进栈
pop ebx <-出栈操作,前面也说了,弹出位于栈顶的数据存入ebx
ADD 加法指令 格式:ADD DST,SRC 执行的操作:(DST)<-(SRC)+(DST)
SUB 减法指令 格式:SUB DST,SRC 执行的操作:(DST)<-(DST)-(SRC)
MUL 无符号乘法指令 格式: MUL SRC 执行的操作:字节操作(AX)<-(AL)*(SRC);字操作(DX,AX)<-(AX)*(SRC);双字操作:(EDX,EAX)<- (EAX)*(SRC)
DIV 无符号除法指令 格式:DIV SRC 执行的操作:字节操作:16们被除数在AX中,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中 。表示为:
(AL)<-(AX)/(SRC)的商,(AH)<-(AX)/(SRC)的余数。字操作:32位被除数在DX,AX中。其中DX为高位字,16位除数为源操作数,结果的16 位商 在AX中,16位余数在DX中。表示为:(AX)<-(DX,AX)/(SRC)的商,(DX)<-(DX,AX)/(SRC)的余数。
nop <- 无操作,去掉指令用的吧!去掉一个跳转,让程序直接往下走,就到注册成功处啦(扯远了````)
call <- 调用子程序或函数用的
关于跳转指令,可以查看汇编速查手册,别强迫自己把所有的都一下记住,浪费精力,不懂时再查一下,久了就记住了!
5.0 高级语言程序的汇编浅解析
汇编语言要和硬件直接打交道,写病毒是方便点啦!!而在高级语言中,如C中我们要面向的是问题的解决,对于硬件资源操作,编译器搞定了!在这里稍微讲一下高级语言中与反汇编代码相应的一些地方:
1、定义变量
int a;
一个变量其实是存放在一个内存地址里,如果对a进行赋值"a=10",在反汇编中就有可能表现为:
mov word ptr[007e58c2],A
像这个样子,而a所对应的内存地址就是0x007e58c2了,当然是乱写的一个地址而已,系统怎样分配?(天知道...)
2、比如一个数组
char str[]="hello";
占用了6个字节,最后一个是以0结尾的空字节,数组名可以当做数组的指针!str[0]='h',str[0]相应一个变量地址,比如为[0040e123],那么[0040e124]就为'e',[0040e125]就为'l'....了`
3、指针
char *p;
指针也是一个变量,所以它也对应一个内存地址!但访问时应该是访问其指向的内存地址的内容,而不是这个指针变量的内容,其内容只是一个地址而已!假如该指针变量地址为007e1000,那么语句p=a,这句在高级语言里是让指针p指向a这个内存单元!p里的内容是a的地址,*p实际上是a的内容了!而反汇编有可能表现成这样:
mov [007e1000],007e2000<-假如007e2000为变量a的地址,那么就是把a的地址传到007e1000这个内容里了!
4、函数调用
sub(a,b);
假如sub是自定义的一个减法函数,作用为参数一减去参数二,上面语句为在C中调中时传递参数!前面有说过了,Win32平台下函数调用的参数是通过堆栈来传递的,那么反汇编就是:
(假如a=2,b=1)
mov eax,2
mov ebx,1
push eax
push ebx
call 取地址(sub)
.......
-----------------------------------------------------------------------------------------------
好了,最后感谢大家能看完这篇了了草草的东西,我也回顾了不少知识!在本人能力范围内的事不知道对新手们有没有帮助,还有一点要提醒各位新手,如果真想学好Crack学通Crack这门知识的话,不完全了解汇编是不行的!所以在看了我这篇之后如果能激起你学汇编的信心是最好的!要不等到Crack遇到什么问题时才再想回过头学汇编,那很难!~






