欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

UPX3.03外壳段处理过程全程分析

程序员文章站 2022-06-22 18:42:10
分析的不是很好,有些东西没表达清楚,大家自己分析一哈,这个程序是我自己写的个进程管理,还没写完。。。。UPX3.03加壳,加壳时选了加密处理,高级导入保护,模拟系统标准功能,但是再外壳段好像并...

分析的不是很好,有些东西没表达清楚,大家自己分析一哈,这个程序是我自己写的个进程管理,还没写完。。。。
UPX3.03加壳,加壳时选了加密处理,高级导入保护,模拟系统标准功能,但是再外壳段好像并没见到这几个功能。
先来个CALL公式,等会要用到。具体见附件,自己分析哈

代码:
CALL 地址计算公式:CALL下条指令开始 + E8后面的绝对偏移 = 目标地址

例如 00401B2C是当前地址,5是CALL机器码的长度;E8 CF 00 00 00是机器码

计算: 00401B2C+5+CF=00401C00 E8 CF 00 00 00就是表示CALL 00401C00.

例二: 00401B3B  |.  E8 C0270000            CALL decode.00404300
       00401B3B+5+27C0=00404300,地址就是:CALL 00404300

例三: 00401B5F  |.  E8 3C1B0000            CALL decode.004036A0
       00401B5F+5+1B3C=004036A0,地址就是:CALL 004036A0
00401B5F+5=下条指令开始的地址,向后移动1B3C就是目标指令的开始地址
00417550 > $  60            PUSHAD
00417551   .  BE 15604100   MOV ESI,进程管理.00416015
00417556   .  8DBE EBAFFEFF LEA EDI,DWORD PTR DS:[ESI+FFFEAFEB]      ;  得到代码段的开始地址放在EDI里面
0041755C   .  57            PUSH EDI
0041755D   .  EB 0B         JMP SHORT 进程管理.0041756A
0041755F      90            NOP
00417560   >  8A06          MOV AL,BYTE PTR DS:[ESI]                 ;  现在分析得知00416015这个地址是我们程序代码段的开始地址,被映射到这里了,取出映射的代码的一字节
00417562   .  46            INC ESI                                  ;  指向我们代码的下个字节
00417563   .  8807          MOV BYTE PTR DS:[EDI],AL                 ;  EDI现在是从00401000开始的,把映射的代码放入原来我们代码的地址,那么现在知道在开始代码还原了
00417565   .  47            INC EDI                                  ;  指向我们代码的下个地址,以便存放下个字节
00417566   >  01DB          ADD EBX,EBX                              ;  EBX+EBX,当EBX不等于0的时候就跳,那么下面如果进位加法为0,那么取出下个地址到EBX
00417568   .  75 07         JNZ SHORT 进程管理.00417571
0041756A   >  8B1E          MOV EBX,DWORD PTR DS:[ESI]               ;  00416015这个地址放到EBX里面,
0041756C   .  83EE FC       SUB ESI,-4                               ;  00416015加4
0041756F   .  11DB          ADC EBX,EBX                              ;  进位加法器
00417571   >^ 72 ED         JB SHORT 进程管理.00417560                   ;  向上跳,EBX作为跳不跳的标志,循环处理代码,一个大循环
00417573   .  B8 01000000   MOV EAX,1                                ;  EAX=1
00417578   >  01DB          ADD EBX,EBX                              ;  EBX再加EBX,EBX在这个代码里面作为跳转标志
0041757A   .  75 07         JNZ SHORT 进程管理.00417583
0041757C   .  8B1E          MOV EBX,DWORD PTR DS:[ESI]               ;  ESI指向的地址到EBX
0041757E   .  83EE FC       SUB ESI,-4                               ;  ESI加上4
00417581   .  11DB          ADC EBX,EBX                              ;  进位加法
00417583   >  11C0          ADC EAX,EAX                              ;  进位加法
00417585   .  01DB          ADD EBX,EBX                              ;  EBX+EBX
00417587   .^ 73 EF         JNB SHORT 进程管理.00417578
00417589   .  75 09         JNZ SHORT 进程管理.00417594                  ;  跳转到下面
0041758B   .  8B1E          MOV EBX,DWORD PTR DS:[ESI]
0041758D   .  83EE FC       SUB ESI,-4
00417590   .  11DB          ADC EBX,EBX
00417592   .^ 73 E4         JNB SHORT 进程管理.00417578
00417594   >  31C9          XOR ECX,ECX                              ;  ECX清零
00417596   .  83E8 03       SUB EAX,3                       &n