| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2937 人关注过本帖
标题:反汇编的一段程序片断 挺复杂的 研究中
只看楼主 加入收藏
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
结帖率:59.52%
  已结贴   问题点数:20  回复次数:4   
反汇编的一段程序片断 挺复杂的 研究中
程序代码:
009E7645    55              push ebp                                 ; FlexHEX.009E7471
009E7646    8BEC            mov ebp,esp
009E7648    60              pushad
009E7649    55              push ebp
009E764A    8B75 08         mov esi,dword ptr ss:[ebp+0x8]
009E764D    8B7D 0C         mov edi,dword ptr ss:[ebp+0xC]
009E7650    FC              cld
009E7651    B2 80           mov dl,0x80
009E7653    8A06            mov al,byte ptr ds:[esi]
009E7655    46              inc esi
009E7656    8807            mov byte ptr ds:[edi],al
009E7658    47              inc edi
009E7659    02D2            add dl,dl
009E765B    75 05           jnz XFlexHEX.009E7662                    ; 当前add dl dl指令在ZF=0的时候esi+1 ZF=1时 esi+2 add dl dl 执行两次
009E765D    8A16            mov dl,byte ptr ds:[esi]
009E765F    46              inc esi
009E7660    12D2            adc dl,dl
009E7662  ^ 73 EF           jnb XFlexHEX.009E7653                    ; CF==0时 要么连续复制 要么隔一个字符复制
009E7664    02D2            add dl,dl                                ; cf==1时
009E7666    75 05           jnz XFlexHEX.009E766D                    ; 不为0的话就跳转 ZF=0
009E7668    8A16            mov dl,byte ptr ds:[esi]
009E766A    46              inc esi
009E766B    12D2            adc dl,dl
009E766D    73 4A           jnb XFlexHEX.009E76B9                    ; cf==1 chu
009E766F    33C0            xor eax,eax
009E7671    02D2            add dl,dl
009E7673    75 05           jnz XFlexHEX.009E767A
009E7675    8A16            mov dl,byte ptr ds:[esi]
009E7677    46              inc esi
009E7678    12D2            adc dl,dl
009E767A    0F83 D6000000   jnb FlexHEX.009E7756                     ; cf==1 出循环
009E7680    02D2            add dl,dl
009E7682    75 05           jnz XFlexHEX.009E7689
009E7684    8A16            mov dl,byte ptr ds:[esi]
009E7686    46              inc esi
009E7687    12D2            adc dl,dl
009E7689    13C0            adc eax,eax
009E768B    02D2            add dl,dl
009E768D    75 05           jnz XFlexHEX.009E7694
009E768F    8A16            mov dl,byte ptr ds:[esi]
009E7691    46              inc esi
009E7692    12D2            adc dl,dl
009E7694    13C0            adc eax,eax
009E7696    02D2            add dl,dl
009E7698    75 05           jnz XFlexHEX.009E769F
009E769A    8A16            mov dl,byte ptr ds:[esi]
009E769C    46              inc esi
009E769D    12D2            adc dl,dl
009E769F    13C0            adc eax,eax
009E76A1    02D2            add dl,dl
009E76A3    75 05           jnz XFlexHEX.009E76AA
009E76A5    8A16            mov dl,byte ptr ds:[esi]
009E76A7    46              inc esi
009E76A8    12D2            adc dl,dl
009E76AA    13C0            adc eax,eax
009E76AC    74 06           je XFlexHEX.009E76B4
009E76AE    57              push edi
009E76AF    2BF8            sub edi,eax
009E76B1    8A07            mov al,byte ptr ds:[edi]
009E76B3    5F              pop edi
009E76B4    8807            mov byte ptr ds:[edi],al
009E76B6    47              inc edi
009E76B7  ^ EB A0           jmp XFlexHEX.009E7659                    ; 1
009E76B9    B8 01000000     mov eax,0x1
009E76BE    02D2            add dl,dl
009E76C0    75 05           jnz XFlexHEX.009E76C7
009E76C2    8A16            mov dl,byte ptr ds:[esi]
009E76C4    46              inc esi
009E76C5    12D2            adc dl,dl
009E76C7    13C0            adc eax,eax
009E76C9    02D2            add dl,dl
009E76CB    75 05           jnz XFlexHEX.009E76D2
009E76CD    8A16            mov dl,byte ptr ds:[esi]
009E76CF    46              inc esi
009E76D0    12D2            adc dl,dl
009E76D2  ^ 72 EA           jb XFlexHEX.009E76BE
009E76D4    83E8 02         sub eax,0x2
009E76D7    75 28           jnz XFlexHEX.009E7701
009E76D9    B9 01000000     mov ecx,0x1
009E76DE    02D2            add dl,dl
009E76E0    75 05           jnz XFlexHEX.009E76E7
009E76E2    8A16            mov dl,byte ptr ds:[esi]
009E76E4    46              inc esi
009E76E5    12D2            adc dl,dl
009E76E7    13C9            adc ecx,ecx
009E76E9    02D2            add dl,dl
009E76EB    75 05           jnz XFlexHEX.009E76F2
009E76ED    8A16            mov dl,byte ptr ds:[esi]
009E76EF    46              inc esi
009E76F0    12D2            adc dl,dl
009E76F2  ^ 72 EA           jb XFlexHEX.009E76DE
009E76F4    56              push esi
009E76F5    8BF7            mov esi,edi
009E76F7    2BF5            sub esi,ebp
009E76F9    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[>
009E76FB    5E              pop esi
009E76FC  ^ E9 58FFFFFF     jmp FlexHEX.009E7659                     ; 2
009E7701    48              dec eax
009E7702    C1E0 08         shl eax,0x8
009E7705    8A06            mov al,byte ptr ds:[esi]
009E7707    46              inc esi
009E7708    8BE8            mov ebp,eax
009E770A    B9 01000000     mov ecx,0x1
009E770F    02D2            add dl,dl
009E7711    75 05           jnz XFlexHEX.009E7718
009E7713    8A16            mov dl,byte ptr ds:[esi]
009E7715    46              inc esi
009E7716    12D2            adc dl,dl
009E7718    13C9            adc ecx,ecx
009E771A    02D2            add dl,dl
009E771C    75 05           jnz XFlexHEX.009E7723
009E771E    8A16            mov dl,byte ptr ds:[esi]
009E7720    46              inc esi
009E7721    12D2            adc dl,dl
009E7723  ^ 72 EA           jb XFlexHEX.009E770F
009E7725    3D 007D0000     cmp eax,0x7D00
009E772A    73 1A           jnb XFlexHEX.009E7746
009E772C    3D 00050000     cmp eax,0x500
009E7731    72 0E           jb XFlexHEX.009E7741
009E7733    41              inc ecx
009E7734    56              push esi
009E7735    8BF7            mov esi,edi
009E7737    2BF0            sub esi,eax
009E7739    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[>
009E773B    5E              pop esi
009E773C  ^ E9 18FFFFFF     jmp FlexHEX.009E7659                     ; 3
009E7741    83F8 7F         cmp eax,0x7F
009E7744    77 03           ja XFlexHEX.009E7749
009E7746    83C1 02         add ecx,0x2
009E7749    56              push esi
009E774A    8BF7            mov esi,edi
009E774C    2BF0            sub esi,eax
009E774E    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[>
009E7750    5E              pop esi
009E7751  ^ E9 03FFFFFF     jmp FlexHEX.009E7659                     ; 4
009E7756    8A06            mov al,byte ptr ds:[esi]
009E7758    46              inc esi
009E7759    33C9            xor ecx,ecx
009E775B    C0E8 01         shr al,0x1
009E775E    74 12           je XFlexHEX.009E7772
009E7760    83D1 02         adc ecx,0x2
009E7763    8BE8            mov ebp,eax
009E7765    56              push esi
009E7766    8BF7            mov esi,edi
009E7768    2BF0            sub esi,eax
009E776A    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[>
009E776C    5E              pop esi
009E776D  ^ E9 E7FEFFFF     jmp FlexHEX.009E7659                     ; 5
009E7772    5D              pop ebp
009E7773    2B7D 0C         sub edi,dword ptr ss:[ebp+0xC]
009E7776    897D FC         mov dword ptr ss:[ebp-0x4],edi
009E7779    61              popad
009E777A    5D              pop ebp
009E777B    C2 0800         retn 0x8
搜索更多相关主题的帖子: color 
2014-08-21 20:58
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:366
帖 子:11487
专家分:42723
注 册:2006-5-13
  得分:10 
反汇编是件苦差事,费脑筋不说,且容易落入程序编制者设计的陷阱中。不过也乐在其中!

活到老,学到老! http://www. E-mail:hu-jj@
2014-08-22 07:17
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:398
帖 子:13396
专家分:51686
注 册:2012-10-18
  得分:10 
楼主小气  就放20分

DO IT YOURSELF !
2014-08-22 07:47
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
  得分:0 
代码片断解析:
数据复制部分
009E7651    B2 80           mov dl,0x80
009E7653    8A06            mov al,byte ptr ds:[esi]
009E7655    46              inc esi
009E7656    8807            mov byte ptr ds:[edi],al
009E7658    47              inc edi
009E7659    02D2            add dl,dl
009E765B    75 05           jnz XFlexHEX.009E7662                  
009E765D    8A16            mov dl,byte ptr ds:[esi]
009E765F    46              inc esi
009E7660    12D2            adc dl,dl
009E7662  ^ 73 EF           jnb XFlexHEX.009E7653                    ; CF==0时 跳转到009E7653    8A06            mov al,byte ptr ds:[esi]

这里是个条件循环   
add dl dl 满足JZ条件必须满足  dl=80H  JZ条件引起的动作为
mov dl,byte ptr ds:[esi]  
inc esi
adc dl,dl

产生循环条件 CF==0  

从程序开始dl=80H  复制数据一次后 add dl dl  dl==0  JZ条件满足 此时完成动作
mov dl,byte ptr ds:[esi]  
inc esi
adc dl,dl

接着判断 CF标志  CF==1的情况稍后分析,CF==0产生循环 ADD DL DL

此时DL发生动作
ADC DL DL
ADD DL DL

之后如DL!=0  则只用判断CF标志 CF==0 则
ADD DL DL

连续复制的条件是 下面一系列的动作后  DL==0
ADC dl dl
add dl dl
add dl dl
add dl dl
................................

由此可以用数学公式表示  令a=dl f(x)表示第x次动作后  DL的值  则有
       a+a   当cf==0时
f(1)=
       a+a+1 当cf==1时
f(2)=2f(1)
f(3)=2f(2)

归纳出来就有
f(x)=2f(x-1)

由DL只能表达0-256之间的数值
所以有
0<=f(x-1)<=128
由于动作:
adc dl dl
先判断是否进位
先考虑 CF==0的情况(即循环复制数据)
CF==0   add dl dl
0=<dl<128
产生ZF==0的情况为
dl取 0 1 2  4 8 16 32 64
当dl=0时 dl被替换
当dl=1时1 2 4 8 16 32 64 128 可以复制8个数据
当dl=2时2 4 8 16 32 64 128  可以复制7个数据
依次推下去
当dl=64时  64 128复制两个数据

我要成为嘿嘿的黑客,替天行道
2014-08-23 03:19
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
  得分:0 
当esi所对应的数据中一个字节取
{0 1 3 7 15 31 63}
中的任何一个发生连续复制
对应复制个数集合
{8 7 6 5 4 3 2}
 
当这个字节取 0-128中除去 {0 1 3 7 15 31 63}其他数值时将退出复制过程
复制的个数为 设取出的数据为a
128/(a+1) 的商 取2的对数值就为可复制的数据的个数
当取 2时 最大个数为6
当取3-7时 为 5   (不包含3 和 7后面一样)
当取7-15  为 4
当取15-32 为 3
当取32-64 为 2
当取64-128 为 1
当取大于等于128时为0

数据发生复制过程分析完毕

[ 本帖最后由 zhu224039 于 2014-8-23 03:55 编辑 ]

我要成为嘿嘿的黑客,替天行道
2014-08-23 03:46
快速回复:反汇编的一段程序片断 挺复杂的 研究中
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066489 second(s), 7 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved