欢迎访问:深圳迷你集成电路有限公司 设为首页 | 加入收藏 | 联系我们
网站首页 公司简介 程序反汇编 行业新闻 电路板抄板 加密狗克隆 IC芯片解密 联系我们
新闻列表
  电路板抄板
 
印碳油生产能力及丝印房碳油板工艺控制 
 
线路板故障检修中观察法有几个步骤? 
 
简单介绍PCB线路板覆铜技术 
 
抄板涉及哪些领域和产品类型 
 
分析讲解PCB制作七步流程 
 
简单解析PCB的制作原理 
 
PCB抄板反推原理图方法? 
 
简单介绍pcb外层蚀刻状态不相同的问题 
 
在PCB外层电路中什么是蚀刻工艺? 
 
我们知道的PCB正片和负片有哪些区别 ? 
  IC芯片解密
 
IC芯片功耗有哪些降低方法?  
 
解析芯片解密方法及过程 
 
简单介绍SoC与SiP中芯片解密的应用 
 
单片机RAM测试故障方法有几种? 
 
安防行业发展和芯片技术创新相辅相成 
 
根据“后摩尔时代”芯片行业如何发展? 
 
芯片解密也能走上绿色环保之路? 
 
加热仪ic解密要注意哪些? 
 
Ic单片机在生活中有哪些重要性? 
 
单片机解密是技术的一种创新 
联系我们
深圳迷你集成电路有限公司
地址:深圳市宝安区
联系人:杨先生
热线:130-6693-6900
 
>>加密狗克隆
破解云控手机软件解密版的方法和思路

破解云控手机解密版的方法和思路

本文主要介绍云控手机软件破解版破解中的汇编基础,并不能取代汇编教程,也不能作为汇编教程学习,只能作为云控手机解密版破解过程中对指令的参考
寄存器
1.云控手机解密版通用寄存器
通用寄存器包括了8个16/32位的寄存器:AX/EAX,BX/EBX,CX/ECX,DX/EDX,SP/ESP,BP/EBP,DI/EDI及SI/ESI.其中AX/EAX,BX/EBX,CX/ECX,DX/EDX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数,结果或其他信息.它们还可分为两个独立的8位寄存器使用,命名为AL,AH,BL,BH,CL,CH,DL和DH.这4个通用数据寄存器除通用功能外,还有如下专门用途:
1.    AX/EAX作为累加器用,所以它是算术运算的主要寄存器.在乘除指令中指定用来存放操作数.另外,所有的I/O指令都使用AX或AL与外部设备传送信息.
2.    BX/EBX在计算存储器地址时,可作为基址寄存器使用.
3.    CX/ECX常用来保存计数值,如在移位指令,循环指令和串处理指令中用作隐含的计数器.DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据.此外,对某些I/O操作,DX可用来存放I/O的端口地址.
4.    SP/ESP,BP/EBP,SI/ESI,DI/EDI四个16/32位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16/32位)为单位使用.此外,它们更经常的用途是在存储器寻址时,提供偏移地址.因此,它们可称为指针或变址寄存器.
5.    SP/ESP称为堆栈指针寄存器,用来指出栈顶的偏移地址.
6.    BP/EBP称为基址指针寄存器,在寻址时作为基地址寄存器使用,但它必须与堆栈段寄存器SS联用来确定堆栈段中的存储单元地址.
2. 标志寄存器FLAG
条件码标志用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由(CPU)自动设置的.由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码.
1.    进位标志 CF,记录运算时最高有效位产生的进位值.
2.    符号标志 SF,记录运算结果的符号.结果为负时置1,否则置0.
3.    零标志 ZF,运算结果为0时ZF位置1,否则置0.
4.    溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出.溢出时OF位置1,否则置0.
5.    辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值.
6.    奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件.当结果操作数中1的个数为偶数时置1,否则置0.
数据传送指令
1. 传送指令MOV(move)
传送指令是使用最频繁的指令,它相对于高级语言里的赋值语句.指令的格式如下:
1.  MOV  Reg/Mem, Reg/Mem/Imm
其中:Reg—Register(寄存器),Mem—Memory(存储器),Imm—Immediate(立即数),它们可以是8位,16位或32位(特别指出其位数的除外).
2.传送—填充指令
传送—填充指令是把位数短的源操作数传送给位数长的目的操作数。指令格式如下:
1.  MOVSX/MOVZX  Reg/Mem, Reg/Mem/Imm
其中:80386+表示80386及其之后的CPU,其它类似符号含义类同,不再说明。
指令的主要功能和限制与MOV指令类似,不同之处是:在传送时,对目的操作数的高位进行填充。根据其填充方式,又分为:符号填充和零填充。
1.    符号填充指令MOVSX
MOVSX的填充方式是:用源操作数的符号位来填充目的操作数的高位数据位
2.    零填充指令MOVZX
MOVZX的填充方式是:恒用0来填充目的操作数的高位数据位
例如,AL=87H,指令MOVSX CX,
AL;MOVZX DX, AL执行后,问CX和DX的值是什么?
根据传送-填充指令的填充方式可知:
指令MOVSX
CX, AL执行后,(CX)=0FF87H,指令MOVZX DX, AL执行后,(DX)=0087H。
从上例可看出,两条指令的源操作数完全一样,但因为它们的填充方式不同,所得到的结果而就不同。
3. 交换指令XCHG
交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同。其指令格式如下:
1.  XCHG  Reg/Mem, Reg/Mem
例如,AX=5678H,BX=1234H,指令XCHG AX, BX执行后,AX和BX的值是什么?
这是两个寄存器内容进行交换,指令执行后,有:(AX)=1234H,(BX)=5678H。
4. 取有效地址指令LEA(Load)
指令LEA是把一个内存变量的有效地址送给指定的寄存器。其指令格式如下:
1.  LEA Reg, Mem5. 取段寄存器指令
该组指令的功能是把内存单元的一个“低字”传送给指令中指定的16位寄存器,把随后的一个“高字”传给相应的段寄存器(DS、ES、FS、GS和SS)。其指令格式如下:
1.  LDS/LES/LFS/LGS/LSS Reg, Mem堆栈操作指令
堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进/压栈操作和出/弹栈操作。
1. 进栈操作
PUSH
指令格式:
1.  PUSH Reg/Mem
一个字进栈,系统自动完成两步操作:SP←SP-2,(SP)←操作数;
一个双字进栈,系统自动完成两步操作:ESP←ESP-4,(ESP)←操作数。
PUSHA
指令格式:
1.  PUSHA
其功能是依次把寄存器AX、CX、DX、BX、SP、BP、SI和DI等压栈。
PUSHAD
指令格式:
1.  PUSHAD
其功能是把寄存器EAX、ECX、EDX、EBX、ESP、EBP、ESI和EDI等压栈。
2. 出栈操作
POP
指令格式:
1.  POP Reg/Mem
弹出一个字,系统自动完成两步操作:操作数←(SP),SP←SP-2;
弹出一个双字,系统自动完成两步操作:操作数←(ESP),ESP←ESP-4。
POPA
指令格式:
1.  POPA
其功能是依次把寄存器DI、SI、BP、SP、BX、DX、CX和AX等弹出栈。其实,程序员不用记住它们的具体顺序,只要与指令PUSHA对称使用就可以了。
POPAD
指令格式:POPAD
其功能是依次把寄存器EDI、ESI、EBP、ESP、EBX、EDX、ECX和EAX等弹出栈,它与PUSHAD对称使用即可.
算术运算指令
算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。
该组指令的操作数可以是8位、16位和32位(80386+)。当存储单元是该类指令的操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。
1. 加法指令
指令的格式:
1.  ADD  Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作数的值加到目的操作数中。
带进位加指令ADC(见得较少)
指令的格式:
1.  ADC  Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作数和进位标志位CF的值(0/1)一起加到目的操作数中。
加1指令INC
指令的格式:
1.  INC  Reg/Mem
受影响的标志位:AF、OF、PF、SF和ZF,不影响CF
指令的功能是把操作数的值加1。
交换加指令XADD(见得较少)
指令的格式:
1.  XADD  Reg/Mem, Reg
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是先交换两个操作数的值,再进行算术“加”法操作
2. 减法指令
减法指令SUB
指令的格式:
1.  SUB  Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是从目的操作数中减去源操作数。
1. 带借位减SBB(见得较少)
指令的格式:
1.  SBB  Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作数和标志位CF的值从目的操作数中一起减去。
1. 减1指令DEC
指令的格式:
1.  DEC  Reg/Mem
受影响的标志位:AF、OF、PF、SF和ZF,不影响CF
指令的功能是把操作数的值减去1。
2. 求补指令NEG
指令的格式:
1.  NEG  Reg/Mem
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能:操作数=0-操作数,即改变操作数的正负号
3. 乘法指令
计算机的乘法指令分为无符号乘法指令和有符号乘法指令,它们的唯一区别就在于:数据的最高位是作为“数值”参与运算,还是作为“符号位”参与运算。
乘法指令的被乘数都是隐含操作数,乘数在指令中显式地写出来。CPU会根据乘数是8位、16位,还是32位操作数,来自动选用被乘数:AL、AX或EAX。
指令的功能是把显式操作数和隐含操作数相乘,并把乘积存入相应的寄存器中。
1. 无符号数乘法指令MUL/FMUL
指令的格式:
1.  MUL  Reg/Mem
受影响的标志位:CF和OF(AF、PF、SF和ZF无定义)
指令的功能是把显式操作数和隐含操作数(都作为无符号数)相乘
2. 有符号数乘法指令IMUL/FIMUL
指令的格式:
1.  IMUL Reg/Mem 2.  IMUL Reg, Imm3.  IMUL Reg, Reg, Imm 4.  IMUL Reg, Reg/Mem4. 除法指令
除法指令的被除数是隐含操作数,除数在指令中显式地写出来。CPU会根据除数是8位、16位,还是32位,来自动选用被除数AX、DX-AX,还是EDX-EAX。
除法指令功能是用显式操作数去除隐含操作数,可得到商和余数。当除数为0,或商超出数据类型所能表示的范围时,系统会自动产生0号中断。
1. 无符号数除法指令DIV/FDIV
指令的格式:
1.  DIV  Reg/Mem
指令的功能是用显式操作数去除隐含操作数(都作为无符号数)。指令对标志位的影响无定义.
2. 有符号数除法指令IDIV/FIDIV
指令的格式:
1.  IDIV  Reg/Mem
受影响的标志位:AF、CF、OF、PF、SF和ZF
逻辑运算指令
逻辑运算指令是另一组重要的指令,它包括:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)和异或指令(XOR),逻辑运算指令也是经常使用的指令。
1. 逻辑与操作指令AND
指令的格式:
1.  AND Reg/Mem, Reg/Mem/Imm
受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)
指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“与操作”,操作结果存入目标操作数中。
2. 逻辑或操作指令OR
指令的格式:
1.  OR Reg/Mem, Reg/Mem/Imm
受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)
指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑”或操作”,操作结果存入目标操作数中。
1. 逻辑非操作指令NOT
指令的格式:
1.  NOT Reg/Mem
其功能是把操作数中的每位变反,即:1←0,0←1。指令的执行不影响任何标志位。
2. 逻辑异或操作指令XOR
指令的格式:
1.  XOR Reg/Mem, Reg/Mem/Imm
受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)
指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑”异或操作”,操作结果存入目标操作数中。
1.  mov....--->004025362.  call...3.    ....4.    ....5.    xor eax,eax--->返回为0//or eax,eax6.    retn7.  je/jz..--->0040253C检测位指令TEST
检测位指令是把二个操作数进行逻辑“与”操作,并根据运算结果设置相应的标志位,但并不保存该运算结果,所以,不会改变指令中的操作数。在该指令后,通常用JE、JNE、JZ和JNZ等条件转移指令。
指令的格式:
1.  TEST  Reg/Mem, Reg/Mem/Imm
受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)
1.  call XXXXXXXX2.  test al,al/eax,eax...3.  je/jne...循环指令
循环指令本身的执行不影响任何标志位.
1.循环指令
循环指令LOOP的一般格式:
1.  LOOP 标号2.  LOOPW 标号  ;CX作为循环计数器3.  LOOPD 标号  ;ECX作为循环计数器4.  ....5.  ....6.  inc eax7.  dex ebx8.  cmp eax,ebx9.  jne/je XXXX ^
求1+2+…+1000之和,并把结果存入AX中。
方法1:因为计数器CX只能递减,所以,可把求和式子改变为:1000+999+…+2+1。
1.   … 2.         XOR AX, AX 3.         MOV CX, 1000D 4.  again: ADD AX, CX ;计算过程:1000+999+…+2+15.         DEC CX 6.         LOOP again 7.  …
方法2:不用循环计数器进行累加,求和式子仍为:1+2+…+999+1000。
1.   … 2.         XOR AX, AX 3.         MOV CX, 1000D 4.         MOV BX, 1 5.  again: ADD AX, BX ;计算过程:1+2+…+999+1000 6.         INC BX 7.         LOOP again 8.  …
从程序段的效果来看:云控手机解密版方法1要比方法2好.
转移指令
转移指令是汇编语言程序员经常使用的一组指令。在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所以,在汇编语言中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令。
转移指令分无条件转移指令和有条件转移指令两大类。
1. 无条件转移指令
无条件转移指令包括:JMP、子程序的调用和返回指令、中断的调用和返回指令等。
下面只介绍无条件转移指令JMP
JMP指令的一般形式:
1.  JMP  标号/Reg/Mem2. 条件转移指令
条件转移指令是一组极其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段。微机的指令系统提供了丰富的条件转移指令来满足各种不同的转移需要,在编程序时,要对它们灵活运用。
条件转移指令又分三大类:基于无符号数的条件转移指令、基于有符号数的条件转移指令和基于特殊算术标志位的条件转移指令。
指令的助忆符http://www.dbgpro.com/archives/239
1. 无符号数的条件转移指令
指令的助忆符
1.  JE/JZ2.  ZF=1 Jump Equal or Jump Zero 3.   4.  JNE/JNZ5.  ZF=0 Jump Not Equal or Jump Not Zero 6.   7.  JA/JNBE8.  CF=0 and ZF=0 Jump Above or Jump Not Below or Equal9.   10.JAE/JNB11.CF=0 Jump Above or Equal or Jump Not Below 12. 13.JB/JNAE14.CF=1 Jump Below or Jump Not Above or Equal15. 16.JBE/JNA17.CF=1 or AF=1 Jump Below or Equal or Jump Not Above 2.有符号数的条件转移指令
指令的助忆符
1.  JE/JZ2.  ZF=1 Jump Equal or Jump Zero 3.   4.  JNE/JNZ5.  ZF=0 Jump Not Equal or Jump Not Zero 6.   7.  JG/JNLE8.  ZF=0 and SF=OF Jump Greater or Jump Not Less or Equal 9.   10.JGE/JNL11.SF=OF Jump Greater or Equal or Jump Not Less 12. 13.JL/JNGE14.SF≠OF Jump Less or Jump Not Greater or Equal 15. 16.JLE/JNG17.ZF=1 or SF≠OF Jump Less or Equal or Jump Not Greater 3. 特殊算术标志位的条件转移指令
指令的助忆符
检测的转移条件 功能描述
1.  JC2.  CF=1 Jump Carry 3.   4.  JNC5.  CF=0 Jump Not Carry6.   7.  JO8.  OF=1 Jump Overflow9.   10.JNO11.OF=0 Jump Not Overflow12. 13.JP/JPE14.PF=1 Jump Parity or Jump Parity Even15. 16.JNP/JPO17.PF=0 Jump Not Parity or Jump Parity Odd 18. 19.JS20.SF=1 Jump Sign (negative)21. 22.JNS23.SF=0 Jump No Sign (positive)
例,已知一个字节变量char,试编写一程序段,把其所存的大写字母变成小写字母。
解:
1.  next: … 2.  char DB  'F'   ;变量说明 3.  … 4.  MOV AL, char 5.  CMP AL, 'A' 6.  JB next        ;注意:字符是无符号数,不要使用指令JL 7.  CMP AL, 'Z' 8.  JA next 9.  ADD char, 20   子程序的调用和返回指令
子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。
一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,CPU将转而执行子程序中的指令序列,在这方面,调用子程序的操作含有转移指令的功能,子程序的返回指令的转移特性与此类似;
破解云控手机解密版的方法和思路
另一方面,转移指令是一种“一去不复返”的操作,而当子程序完后,还要求CPU能转而执行调用指令之下的指令,它是一种“有去有回”的操作。
为了满足子程序调用和返回操作的特殊性,在指令系统中设置了相应的特定指令。
1. 调用指令(CALL)
调用子程序指令的格式如下
1.  CALL 子程序名/Reg/Mem
子程序的调用指令分为近(near)调用和远(far)调用。如果被调用子程序的属性是近的,那么,CALL指令将产生一个近调用,它把该指令之后地址的偏移量(用一个字来表示的)压栈,把被调用子程序入口地址的偏移量送给指令指针寄存器IP即可实现执行程序的转移
如果被调用子程序的属性是远的,那么,CALL指令将产生一个远调用。这时,调用指令不仅要把该指令之后地址的偏移量压进栈,而且也要把段寄存器CS的值压进栈。在此之后,再把被调用子程序入口地址的偏移量和段值分别送给IP和CS,这样完成了子程序的远调用操作
1.  00405600 call 004068952.  00405604 ......
子程序调用指令本身的执行不影响任何标志位,但子程序体中指令的执行会改变标志位,所以,如果希望子程序的执行不能改变调用指令前后的标志位,那么,就要在子程序的开始处保护标志位,在子程序的返回前恢复标志位。
例如:
1.  CALL  DISPLAY ;DISPLAY是子程序名 2.  CALL  BX ;BX的内容是子程序的偏移量 3.  CALL  WORD1  ;WORD1是内存字变量,其值是子程序的偏移量 4.  CALL  DWORD1 ;DWORD1是双字变量,其值是子程序的偏移量和段值 5.  CALL  word ptr [BX]  ;BX所指内存字单元的值是子程序的偏移量 6.  CALL  dword ptr [BX]  ;BX所指内存双字单元的值是子程序的偏移量和段值 2. 返回指令(RET)
当子程序执行完时,需要返回到调用它的程序之中。为实现此功能,指令系统提供了一条专用的返回指令。
其格式如下:
1.  RET/RETN/RETF [Imm]
云控手机解密版子程序的返回在功能上是子程序调用的逆操作。为了与子程序的远、近调用相对应,子程序的返回也分:远返回和近返回。返回指令在堆栈操作方面是调用指令的逆过程
版权所有:深圳迷你集成电路有限公司 Copyright© 2016-2020 All rights reserved
地址:深圳市宝安区 手机:130-6693-6900 联系人:杨先生