首页
社区
课程
招聘
[原创]od2.01查找中文字符串修改分享
发表于: 2015-10-20 11:00 11916

[原创]od2.01查找中文字符串修改分享

2015-10-20 11:00
11916

<4b6539>
    jmp     72d000;设置搜索标志
<40ce4b>
    jmp @label1       ;修正目录./为当前目录
<41d9ee>
        ;等字符绘制完后才取消标志
    jmp @label2;取消搜索标志
<487d0c>
    nop
    nop
    nop
    nop
    jmp @label3;处理istextunicode
<417dc6>
    jmp @label4;处理[5fa8d4]的有效性
<487d6d>
    jmp @label5;过滤一些非字符串
<00442D42>
    jmp @label6;这里处理命令语句的汇编
<00442D10>
    jmp @label7;能到达这里的是非语句汇编
<00487cfe>
        nop
        nop
        jmp @label8
<0048748a>
    jmp @label9;这里对[5fa8cf]清零
<0040ea2b>
        jmp @label10;这里修改界面字体
    nop
    nop
    nop
    nop
    nop
<487d61>
        jmp @label11;如果这里检查出非字符就让eax=0
<487b5e>
        jmp @label12;这里不处理utf
        nop       
<00410AF2>
        jmp @label13
        nop
<004a1961>
        jmp @label14
        nop
       
<00487630>
        jmp @label15
        nop
<4875ba>       
        jmp @label16
        nop
<0041B1CC>
        jmp @label17
<0041d514>
        jmp @label18
<00487720>
        nop
        jmp @label19
<004A2432>
        jmp @label20
    <72d000>
       mov edi,edi
       push    0055698E
       mov byte [005FA8D1],1;这里设置字符搜索标志
       jmp 4b653e
       nop
       nop

@label1:;修正目录./为当前目录
       cmp     ecx, 0x120000
       jle short @L013
       push    eax
       mov     al, byte ptr [ecx]
       cmp     al, 0x2E
       pop     eax
       jnz short @L013
       push    eax
       mov     al, byte ptr [ecx+0x2]
       cmp     al, 0x5C
       pop     eax
       je      0040CE76
       @L013:
       test    esi, esi
       jnz     0040CE66
       mov     ecx, dword ptr [ebx+0xC]
       jmp     0040CE52
       nop
       nop
@label2:;等字符绘制完后才取消标志
        pop     edi
                  pop     esi
                  pop     ebx
                  mov     esp, ebp
                mov word [005FA8D0],0;这里取消字符搜索标志
                jmp 41d9f3
                nop
                nop
@label3:;处理istextunicode
       cmp byte [005FA8D1],1;有搜索标志才修改
       jmp short @l1
       test eax,eax
       je       00487D6A
       @l1:
       cmp byte [5fa8cb],0
             jne short @k1304
                 xor eax,eax   
                 jmp       00487D6A     
       @k1304:
       push    00545202
       jmp 487d15
       nop
       nop
@label4:;处理[5fa8d4]的有效性
       cmp ebx,5fa8d4
       jne short @l4
       ;到这里ebx=5fa8d4
        mov ecx,[ebx-4];就是读取[5fa8d0]的数值
        cmp cx,0
        je short @l4
        cmp cx,101;搜索标志 [5fa8d0]=1 [5fa8d1]=1
        jne short @l3
        ;mov byte [ebx-4],0;byte [5fa8d0]=0
        ;mov byte [ebx-5],0;byte [5fa8cf]=0
        ;mov byte [ebx-6],0;byte [5fa8ce]=0
        mov dword [ebx-7],0
        mov byte [ebx-2],0
        @l4:
        inc     dword ptr [ebx]
        @l3:
        ;mov byte [5fa8d0],0;byte [5fa8d0]=0
        ;mov byte [5fa8cf],0;byte [5fa8cf]=0
        ;mov dword  [ebx-9],0
        add     esp, 0xC
        jmp 417dcb
        nop
        nop
@label5:;过滤一些非字符串
        pop     esi
        pop     ebx
        mov     esp, ebp
        pop     ebp
        test eax,eax
        je  @l7
        push eax
        mov eax,esp
        add eax,0x10
        push edx
        mov edx,005FA8D0
        ; eax可能是字符串
        cmp byte [edx+1],1 ; 字符查找标志
        jne  @l9
        
        mov eax,[eax]
        push ecx
        mov ecx,eax
        add ecx ,12
        mov eax,[eax]
        
        ;mov edx,5fa8d0
        cmp al,0x41;这里包保留以A开头的字符串
        jne  @l2
        ;这里还是会有一些asni的汉字出现
        ;其实可以处理一下,不过好像不影响使用,就算了。
        mov eax, [ecx-4];这里测试ax是否为asni字符,是就转换成unicode
        xor  ecx,ecx
        
        mov cl,ah
                cmp ecx,fe
                jg short @jj1001
                cmp ecx,40
                jl short @jj1001
                  ;检查低位
                mov cl,al
                cmp ecx,fe
                jg short @jj1001
                cmp ecx,81
                jl short @jj1001
                ;到这里就说明是asni
                mov ecx,1;这里加入连续两个是符号的情况判断
        @jj1001:
        
        ;这里去掉连续两个为符号的情况
        mov cx,ax
        cmp ecx,39
                jg short @jj1002
                cmp ecx,30
                jl short @jj1002
                ;跳走
                jmp short @lj1158
                @jj1002:

        cmp ecx,5a
                jg short @jj1003
                cmp ecx,41
                jl short @jj1003
                ;跳走
                jmp short @lj1158
                @jj1003:
               
                cmp ecx,7a
                jg short @jj1004
                cmp ecx,61
                jl short @jj1004
                ;跳走
                jmp short @lj1158
                @jj1004:
               
                shr eax,8
                mov cx,ax
                mov cx,ax
        cmp ecx,39
                jg short @jj1005
                cmp ecx,30
                jl short @jj1005
                ;跳走
                jmp short @lj1158
                @jj1005:

        cmp ecx,5a
                jg short @jj1006
                cmp ecx,41
                jl short @jj1006
                ;跳走
                jmp short @lj1158
                @jj1006:
               
                cmp ecx,7a
                jg short @jj1007
                cmp ecx,61
                jl short @jj1007
                ;跳走
                jmp short @lj1158
                @jj1007:
                ;能到这里就是两个符号的ascii
               
        jmp short @l5
        @lj1158:
        mov byte [edx],1
        jmp  short @l5;跳出循环
        @l2:
        cmp al,0x55
        jne short  @l5;这里保留以U开头的字符串
        cmp byte [5fa8cb],0
        
        jne short @k1741
        ;这里分utf和正常的unicode
                ;cmp byte [edx+2],1
            ;je @l5
                ;mov byte [edx-1],0
                ;mov byte [edx-2],0
                        shr eax,10
                        cmp al,4e
                        jne short @k1741
                mov eax, [ecx]
                               
                cmp al,7e
                jg short @l5;小于20的去掉
                        cmp al,20
                        jl short @l5
                        cmp ah,0
                        jne short @l5
                        ;上面检查第一位是否为ascii
                        ;下面检查第二位是否为ascii
                        mov eax,[ecx+2]
                        cmp al,7e
                jg short @l5;小于20的去掉
                        cmp al,20
                        jl short @l5
                        cmp ah,0
                        jne short @l5
                       
        @k1741:
        mov byte [edx],1;这里的edx=5fa8d0
        @l5:
        
        pop ecx
        
        
        cmp byte [5fa8cb],0
        jne short @ls1126
        cmp byte [edx+2],1;edx=5fa8d0
        jne short @ls1126
        mov byte [edx],0
        @ls1126:
        mov byte [edx+2],0
        
        cmp byte [5fa8cb],0
        je short @l9
        ;cmp byte [edx-1],1 ; 字符查找标志[005FA8cf]
        ;jne short @l10
        ;mov byte [edx],0
        ;@l10:
        cmp byte [edx-2],1; 字符乱码标志[005fabce]
        jne short @l102
        mov byte [edx],0
        @l102:
        
        ;cmp byte [edx+4],1; 去掉DD类字符
        ;jne short @l1028
        ;mov byte [edx],0
        ;@l1028:
        
        
        @l9:
        ;mov word [edx-2],0;两个标志清0
        pop edx
        pop eax
        @l7:
        jmp 487d72
        nop
        nop
        
@label6:;这里处理命令语句的汇编
        xor     ecx, ecx
        ;[5fa8d0]=0
        mov cl,byte [5fa8d1]
        test ecx,ecx
        je  short @b1
        mov     cl, byte ptr [eax+edx+3];这里检测反汇编代码的第一个字节
        test ecx,ecx;代码的第四个字节为0就认为非语句
        mov  byte [5fa8d2], 0
        jne short @l8;这个判断并不正确所以去掉
        ;mov  byte [5fa8d2], 1
        @l8:
        @b1:
        mov cl, byte ptr [eax+edx]
        jmp 442d47
        nop
        nop
@label7:;能到达这里的是非语句汇编
       push ecx
       xor ecx,ecx
       mov cl,byte [5fa8d1]
       test ecx,ecx
       je  short @b2
       mov  byte [5fa8d2], 1;能到达这里的是非语句汇编
       @b2:
       pop ecx
       jmp     0044781D
       nop
       nop
      
@label8:;处理ascii字符串
    cmp byte [005FA8D1],1
    ;jne @l1336
   
    pushad
    sub ebp,0x120
    lea esi,[ebp];检测是否为Ascii汉字
   
    ;如果本身为unicode直接跳过
    ;怎么判断第一个字符为ascii16的汉字
    ;如果是ascii16的汉字就转成unicode
    ;mov word [ebp],0x7ee7
    ;mov word [ebp+2],0
    xor ebx,ebx
    ;xor ecx,ecx
    xor edx,edx
    ;xor edi,edi
    mov edi,esi
    mov ebp,5fa8cb ;ebp=5fa8cb,是否为ascii或unicode
    xor eax,eax
    mov dword [ebp],0
    mov dword [ebp-4],0;保存字符数量 5fa8c7保存字符数量
    ;mov dword [5fa8c7],0;保存字符数量
        @l1104:
  
  ;去掉00XXXX00的情况
  ;lods  word ptr [esi]
  ;mov ch,ah
  ;lods  word ptr [esi]
  ;mov cl,al
  ;sub esi,4
  ;cmp cx,0
  ;je short @l1103
  
  
  lods  word ptr [esi]
  inc ebx ;字符数计数
  ;下面是检查unicode
  ;如果能连续检查出3个,我们就认为这是一个unicode汉字
  cmp eax,0x4e00
  jl short @asc1200
  cmp eax ,0x9fbb
  jg short @asc1200
   inc edx; 记录unicode汉字数值
   inc byte [ebp-4]
   jmp  @asco1159;跳出检查
  @asc1200:
  
  cmp eax,0xf900
  jl short @asc1201
  cmp eax ,0xfa6a
  jg short @asc1201
   inc edx; 记录unicode汉字数值
   inc byte [ebp-4]
   jmp  @asco1159;跳出检查
  @asc1201:
  
  cmp eax,0xff00
  jl short @asc1202
  cmp eax ,0xff65
  jg short @asc1202
          inc edx; 记录unicode汉字数值
          inc byte [ebp-4]
  jmp  @asco1159;跳出检查
  @asc1202:
  ;上面三个比较得出汉字的unicode
  cmp eax,0x20
  jl short @asc1203
  cmp eax ,0x7f
  jg short @asc1203
          inc edx; 记录unicode汉字数值
          add byte [ebp-4],2
          jmp  @asco1159;跳出检查
  @asc1203:
  
  ;比较一些符号
  cmp eax,0x3001
  jl short @asc12011
  cmp eax ,0x301f
  jg short @asc12011
   inc edx; 记录unicode汉字数值
   add byte [ebp-4],1
   jmp short @asco1159;跳出检查
  @asc12011:
  
  cmp eax,0x2460
  jl short @asc12012
  cmp eax ,0x24fe
  jg short @asc12012
   inc edx; 记录unicode汉字数值
   add byte [ebp-4],1
   jmp short @asco1159;跳出检查
  @asc12012:
  
  cmp eax,0x2200
  jl short @asc12013
  cmp eax ,0x22f0
  jg short @asc12013
   inc edx; 记录unicode汉字数值
   add byte [ebp-4],1
   jmp short @asco1159;跳出检查
  @asc12013:
  
  cmp eax,0x2100
  jl short @asc12014
  cmp eax ,0x2130
  jg short @asc12014
   inc edx; 记录unicode汉字数值
   add byte [ebp-4],1
   jmp short @asco1159;跳出检查
  @asc12014:
  
  cmp eax,0x2160
  jl short @asc12015
  cmp eax ,0x2199
  jg short @asc12015
   inc edx; 记录unicode汉字数值
   add byte [ebp-4],1
   jmp short @asco1159;跳出检查
  @asc12015:
  ;判断一些单字符
  cmp eax,0xD
  jne short @asc12016
   inc edx; 记录unicode汉字数值
   add byte [ebp-4],2
   jmp short @asco1159;跳出检查
  @asc12016:
  
  cmp eax,0xA
  jne short @asc12017
   inc edx; 记录unicode汉字数值
   add byte [ebp-4],2
   jmp short @asco1159;跳出检查
  @asc12017:

  @asco1159:
  ;这里得出字母的unicode
  
  test edx,edx
  jne short @l1204 ;如果第一个都不是unicode,我们就不继续测试
          jmp short @l1103
  @l1204:
  ;ecx=0,则该字符不是unicode
  ;如果此时ebx=1,我们就不继续测试unicode
  ;ecx>0,我们暂且认为是unicode
    ;如果连续n个中出现dh>dl的情况我就认为这是unicode
               
        cmp byte [5fa8d1],0
    ;je short @kk941
    cmp edx,2
    jne short @k15150
            cmp byte [ebp-4],3
            jne short @kk913
            ;这里去掉汉字+unicode字母的情况
            mov byte [ebp+3],1;[ebp+3]为乱码标志
            jmp  @l1252;跳出循环
            @kk913:
            ;cmp byte [ebp-4],4;这里检测出两个连续的unicode字母
            ;jne short @k15160
                    ;jmp @l1252
            ;@k15160:
    @k15150:
    or      ax, ax;当遇到两个字节为0时跳走
    jne short @l1233
    cmp edx,1
    jle short @l1103
   
    ;xor     ecx, ecx
          ;mov     cl, byte ptr [ebp-0x4]
          ;sub     ecx, edx
          ;shl     ecx, 1
          ;cmp     ecx, edx
        ;jne short @kk941
        ;mov byte [ebp+3],1
    ;jmp @l1252
    ;@kk941:
   
   
    ;能到这里说明是unicode
            mov byte [ebp],1;[ebp]为unicode标志
            mov dword [ebp-4],edx;保存字符数量
        jmp      short @l1103
    @l1233:
    cmp ebx,edx
    je short @l1059
            ;如果ebx>dh,说明出现非汉字
            mov byte [ebp+1],1;[ebp+1]为非unicode字符标志
            jmp short @l1103;跳出循环
    @l1059:
    jmp @l1104
@l1103:
   
    ;根据[ebp]=1的条件判断是否为unicode
    mov esi,edi;重新读入字符地址
    cmp byte [ebp],1
    je  @l1252
    mov byte [ebp+1],0;[ebp+1]为非unicode字符标志
    ;这里判断ascii
    xor ebx,ebx
    xor edx,edx
    xor ecx,ecx
    mov byte [ebp-4],0;[5fa8c7]=0 字符数
    @l1259:
    lods  word ptr [esi]
    inc ebx ;字符数计数
    nop
      ;先判断低位字符是否为acsii
        mov cl,al
        cmp ebx,1
        jne @l1202
                ;如果第一个字节为0就跳走
                cmp al,0
                je  @l1252
        @l1202:
        cmp ecx,7f
        jg short @asc1305
        cmp ecx,20
        jl short @asc1305
        inc edx
        cmp edx,2
        jg short @k1514
                inc byte [ebp-4]
        @k1514:
        dec esi ;esi向前移动1位
        jmp @l1303
        @asc1305:
                  ;我们再判断是否为ascii16
                mov cl,ah
                cmp ecx,fe
                jg short @asc1045
                cmp ecx,40
                jl short @asc1045
                  ;检查低位
                mov cl,al
                cmp ecx,fe
                jg short @asc1045
                cmp ecx,81
                jl short @asc1045
                inc edx
                cmp edx ,2
                jg short @k1512
                add byte [ebp-4],3
                @k1512:
  @asc1045:
   
    @l1303:
    ;去掉一些汉字+ascii字母的情况
    cmp dword [5fa8d1],0
    je short @k1515
    cmp edx,2
    jne short @k1515
   
            cmp byte [ebp-4],4
            jne short @k1516
                    jmp short @l1252
            @k1516:
    @k1515:
   
    or      al, al;当遇到两个字节为0时跳走
    jne short @l1301
    cmp edx,1
    jle short @l1252
    ;能到这里说明是ascii16
    mov byte [ebp],2;[ebp]为ascii16标志
    ;cmp dword [5fa8d1],0
    cmp edx,64
    jg short @l1252
    ;jne      short @l1252
    ;add edx,edx
    ;inc edx
   
    mov dword [ebp-4],edx;保存字符数量
   
   
    push edx;字符长度
    mov ebx,edi
    add ebx,440
    push ebx;unicode字符的地址
    push -1;可伸展字符
    push edi;ascii字符的地址
    push 0
    ;push 3a8
                mov eax,[5be6a0];这里读取mbccodepage
                push eax
                call 4f56d6
        ;然后将unicode里的字符串复制到ascii地址里面
    mov esi,ebx
    xor ecx,ecx
    mov edx,dword [ebp-4]
    @L1335:
    ;复制转化好的unicode
    lods    word ptr [esi]
    inc ecx
    cmp ecx,edx
    je      short @l1338
    stos    word ptr es:[edi]
    jmp @L1335
   
    @l1338:
    stos    word ptr es:[edi]
    xor eax,eax
    stos    word ptr es:[edi]
   
        jmp      short @l1252
    @l1301:
        cmp ebx,edx
    je short @l1309
            ;如果ebx>dh,说明出现非汉字
            mov byte [ebp+1],2;[ebp+1]为非unicode字符标志
            jmp short @l1252;跳出循环
    @l1309:
   
        jmp @l1259
        @l1252:
    cmp edx,64;这里去掉一些很长的字符串,这里限制100字以内
    jle short @kk1322
            mov byte [ebp+3],1 ;ebp=5fa8cb
    @kk1322:
   
    cmp byte [ebp],0
    je short @l1211
    cmp byte [ebp+1],0
    je short @l1343
    @l1211:
    mov byte [ebp+3],1;5fa8ce   乱码标志
    @l1343:
   
    cmp byte [5fa8d2],1;20141205加入的判断
    jne short @mm1909
            mov byte [ebp+3],1;5fa8ce   乱码标志
    @mm1909:
    popad
    @l1336:
    cmp  dword [ebp-4],0;保存字符数量 [5fa8c7]
    je short @l1531
   
            mov esi,dword [ebp-4]
            add esi,esi
    @l1531:
    push esi
        lea     ecx, dword ptr [ebp-0x120]
        jmp 487d05
    nop
    nop
      
@label9:;初始化一些数值
          push    esi ;label9
      push    edi
      mov     ebx, dword ptr [ebp+0x8]
      cmp byte [005FA8D1],1
      jne @kd0932
      mov byte [5fa8cf],0
      mov word [5fa8cb],0
      @kd0932:
      ;mov dword [5fa8cb],0
      ;mov byte [5fa8d0],0
      jmp 48748f
      nop
      nop
      
@label10:;修改界面字体
      mov dword ptr ds:[582678],0d
          mov dword ptr ds:[58267C],0
          jmp 40ea3f
          nop
          nop
          
@label11:;结合istextunicode
          add esp,0C
          add ebx,eax
          cmp byte [5fa8cb],0
          jne short @k0955
                  xor ebx,ebx
          @k0955:
          jmp 487d66
          nop
          nop
          
@label12:;处理utf
          
          ;由于od2.01并不能很好的处理utf,所以我们就不处理了
                ;cmp byte [005FA8D1],1
                ;je @li1309
            ;test    byte ptr [ebp+0xC], 0x2
                ;je      00487B6A
                ;@li1309:
                jmp 487b64
                nop
                nop
@label13:
        mov     esi, dword ptr [ebp+0x8] ; 字符串,这里还是没转unicode
        mov     edi, dword ptr [ebp+0x10] ; 要查找的字符,程序已经转成unicode
        mov     ecx, dword ptr [ebp+0xC] ; 这里是字符串大小,好像算法不是很正确
        jmp 410afb
        nop
        nop
       
@label14:;处理后面的查找字符串
        pushad
        mov eax,[esp+20];unicode
        mov ebx,[esp+24];长度
        mov edx,[esp+28];ascii空间

        push    0x0
        push    0x0
        push    eax        ;转换后字符长度
        push    edx        ;转换后的字符
        push    ebx        ;字符长度
        push    eax        ;待转换的unicode
        push    0x0
        ;push    0x0
        mov eax,[5be6a0];这里读取mbccodepage
        push eax
        call 004F57C0
        mov byte [ecx],0
        mov     dword ptr [ebp-0x4], eax        ;保存字符长度
        popad
        add     esp, 0x10 ; 在这里将字符转成ascii
        jmp 4a1967
        nop
        nop
@label15:
        cmp byte [5fa8d1],1
        jne short @ls2045
                jmp 004876a2
        @ls2045:
        cmp dword ptr ss:[ebp-8],0B
        jnz  004876A2 ; 发现这里的判断也有问题,直接跳过
        jmp 487636
        nop
        nop

@label16:
        cmp byte [5fa8d1],1
        jne short @ls20450
                jmp 004876a2        ;需要强制跳转,不然后面显示会有问题
        @ls20450:
        cmp dword ptr ss:[ebp-8],9
        jnz 00487630
        jmp 4875c0
        nop
        nop
       
@label17:;修正CPU INFO栏的显示问题
        ;测试是否含有非数字或字母
        ;有就跳,有就不跳
        ;jmp @sks1350
        mov eax,[esp+8]
        cmp eax,00401000
        jl @sks1350
        ;add eax,8
        ;mov eax,[eax]
        ;cmp ax,49
        ;je short @ff1325
        ;        test    byte ptr [ebp-0x2F], 0x2
        ;        je    0041B1FB
        ;        jmp short @ff1327
        ;@ff1325:
        push esi
                lea esi,[ebp-0x494]
                xor eax,eax
                @xsd1222:
                lods    word ptr [esi]
                        cmp eax ,20
                        jl short @ss1355
                        cmp eax ,7f
                        jg short @s1229
                        test eax,eax
                        je short @s1229
                jmp short @xsd1222
                @ss1355:
                xor eax,eax
                @s1229:
                ;到这里就是含有非ascii
                test eax,eax
                @s1245:
        pop esi
        jmp short @kdk1012
        @sks1350:
        test    byte ptr [ebp-0x2F], 0x2
        @kdk1012:
        je    0041B1FB
        @ff1327:
        lea    ecx, dword ptr [ebp-0x54]
        jmp 41b1d1
        nop
        nop
       
@label18:;修正代码栏注释显示不全
        ;当满足两个条件时;修改输出长度
        ;1.字符长度不为0
        ;2.字符开始地址+字符长度*2的两字节内容为0
        mov ecx,[esp+4]
        test ecx,ecx
        je short @lkl1438
        add ecx,ecx;字符数*2
        add ecx,edx;看看是否结束
        mov edx,[ecx]
        test dx,dx
        jne short @lkl1438
        mov ecx,eax
        mov edx,[ecx]
        add ecx,8
        push ebx
        mov ebx,[ecx]
        push eax
        mov eax,ebx
        sub eax,edx
        add ebx,eax
        mov [ecx],ebx
        pop eax
        pop ebx
        @lkl1438:
        mov edx,1000
        jmp 0041d519
        nop
        nop
@label19:;预先检查是否为unicode,如果前三个是,我们就认为是
        xor edx,edx
        xor ecx,ecx
        xor eax,eax
        lea esi,[ebp-0x120];将字符的地址传过来
        @label1009:
        lods  word ptr [esi]
        inc edx;检测字符数
        ;下面检查字符是否为unicode

  cmp eax ,0x5b57;字
  jne short @aac1200
   inc ecx; 记录unicode数量
   jmp  @aaco1159
  @aac1200:

  cmp eax ,0x4e2d;中
  jne short @aac12001
   inc ecx; 记录unicode数量
   jmp  @aaco1159
  @aac12001:
  
    cmp eax ,0x7248;版
  jne short @aac12002
   inc ecx; 记录unicode数量
   jmp  @aaco1159
  @aac12002:
  
    cmp eax ,0x672c;本
  jne short @aac12003
   inc ecx; 记录unicode数量
   jmp  @aaco1159
  @aac12003:
  
    cmp eax ,0x529f;功
  jne short @aac12004
   inc ecx; 记录unicode数量
   jmp  @aaco1159
  @aac12004:
  
    cmp eax ,0x80fd;能
  jne short @aac12005
   inc ecx; 记录unicode数量
   jmp  @aaco1159
  @aac12005:

  @aaco1159:
    cmp eax,0x100
    jl short @jj1105
    jmp @label1009
    @jj1105:
        cmp ecx,2;这里说明前面三个都是unicode
        jl short @label1051
        jmp 004878ac
        ;jmp 00487bef
        @label1051:
        mov     al, byte ptr [ebp-0x120]
        jmp 00487726
        nop
       
@label20:;设置和删除所有call断点
        cmp byte [5fa8c0],1;根据这个数值决定是否为设置或删除所有call
        je 4a2437
        cmp edx,dword ptr ds:[ebx+C]
        jnz  004A247F
        jmp 4a2437
        nop


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

收藏
免费 3
支持
分享
最新回复 (13)
雪    币: 768
活跃值: (535)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
2
老大猛人。。。 顶。
2015-10-20 11:41
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
支持,顶
2015-10-20 13:28
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
OD2.01附加一个进程时候时间太长,有办法解决没
2015-10-20 14:45
0
雪    币: 8891
活跃值: (3123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
超喜欢楼主的头像了
2015-10-20 15:17
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
multiasm啊,第一次见到这么长的patch
2015-10-20 17:46
0
雪    币: 3279
活跃值: (1997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
直接写插件不是更好。
2015-10-21 03:04
0
雪    币: 3279
活跃值: (1997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
大牛搞一下 x64dbg 这款调试器吧。
2015-10-21 08:42
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
直接提交给作者不是更好。
2015-10-21 12:51
0
雪    币: 6790
活跃值: (4446)
能力值: (RANK:600 )
在线值:
发帖
回帖
粉丝
10
good
2015-10-21 19:27
0
雪    币: 251
活跃值: (302)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
我也来顶一下
2015-10-21 21:30
0
雪    币: 12383
活跃值: (5143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
分析的好仔细哟
2015-10-21 21:33
0
雪    币: 807
活跃值: (2303)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
首先要感谢楼主的脚本,使用该脚本需要做些准备工作,有些同学可能会碰到困难,所以在这里多解释几句,希望不是多余的。

      此脚本从原始程序的尾部开始,新添加了 0x681 个字节的指令,由于容纳这些指令的地址空间已经超出了原始程序的映像范围,所以,如果直接打开原始程序,使用 Multiline Ultimate assembler  插件运行补丁脚本,一定会报错。正确的方法为,在程序的尾部增加 0x800 个字节的内容,这些添加的字节最好都是 nop (0x90),然后,用 lordpe 为 ollydbg.exe 登记这些新增加的空间。具体方法是,在原来最后一个节区(.rsrc)之后新增加一个容量为 0x800 字节的新节区(节区名称可以随意),然后保存,最后别忘记 “Rebuild PE”使所有修改生效。经过这些准备,就可以运行脚本补丁程序了。
2015-10-28 22:21
0
雪    币: 10703
活跃值: (3604)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
楼上的正解。
2015-10-28 23:06
0
游客
登录 | 注册 方可回帖
返回
//