• 软件汉化:OllyDBG 入门之二破解预备知识(转)


    一、机械码,又称机器码
    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)

    call  调用子程序
    je 或 jz
     若相等则跳(机器码74 或0F84)
    jne 或 jnz
     若不相等则跳(机器码75或0F85)
    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 出错信息(我们希望不要跳到这里,不让它出现)
    。。。


    五、爆破无敌口诀


    一条(跳)就死,九筒(90)就胡 (对应上面的2.修改为nop )
    一条(跳)就胡,一饼(EB)伺候 (对应上面的1.修改为jmp )
    妻死(74)便妻无(75)
    爸死(84)便爸无(85)

    汇编语言的几条常用命令:


    根据条件作出是否跳转的决定,通常前面会有一个判断语句,例如:
    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<?td> 使AX的内容清零,每个寄存器与自己作异或运算等于清零动作.<?td>

    子程式

    一个子程的模样长得像这个样子: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的值互换

    我最近在玩和讯财经微博,很方便,很实用。
    一句话,一张图,随时随地与我分享理财心得与亲历见闻。
    点击以下链接激活,来和我一起玩吧!
    http://t.hexun.com/active.aspx?InviteCode=vgHnLwTTuTjrgTw%2fP7b6%2fA%3d%3d

  • 相关阅读:
    js计算图片等比例缩放
    HTML2Canvas截图插件
    UUID字符串使用
    SQL删除表数据
    快速上手Vue+百度地图
    Vue 项目如何使用Echarts , 手摸手带你入门
    APUoyNOTrO
    React当中渲染文本的两个知识点
    Cookie与Session
    报障系统
  • 原文地址:https://www.cnblogs.com/Gemgin/p/3136286.html
Copyright © 2020-2023  润新知