欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

讨论

讨论

分析了一点点幻影,今天累了,改日继续:0

[ DBPE 2.33 -> Ding Boy ]部分分析
Written By LiNSoN
    设置OllyDbg忽略所有异常,载入文件后不分析代码,使用IsDebuggerPresent插件隐藏调试器。
   (仅跟踪Windows XP系统部分代码)
004FE000    EB 20           JMP SHORT dbpe.004FE022//--附加代码入口
004FE022    9C              PUSHFD
004FE023    55              PUSH EBP
004FE024    57              PUSH EDI
004FE025    56              PUSH ESI
004FE026    52              PUSH EDX
004FE027    51              PUSH ECX
004FE028    53              PUSH EBX
004FE029    9C              PUSHFD
//--保存初始状态标志、寄存器
004FE02A    E8 00000000     CALL dbpe.004FE02F
004FE02F    5D              POP EBP
004FE030    81ED 13694000   SUB EBP,dbpe.00406913
//--将004FE02F处指令的地址减去它的偏移量,附加代码自定位,防止寻址错误
004FE07A    50              PUSH EAX//--保存EAX
004FE097    8B85 D97D4300   MOV EAX,DWORD PTR SS:[EBP+437DD9]
004FE0B4    83F8 00         CMP EAX,0
004FE0BC    0F85 03030000   JNZ dbpe.004FE3C5
//--?
004FE0CC    B8 DDF00200     MOV EAX,2F0DD
004FE0D6    83C0 10         ADD EAX,10
//--计算附加代码大小
004FE0F0    6A 04           PUSH 4//--Protect = PAGE_READWRITE
004FE0F2    68 00100000     PUSH 1000//--AllocationType = MEM_COMMIT
004FE0F7    50              PUSH EAX//--Size = 2F0ED (192749)
004FE0F8    6A 00           PUSH 0//--Address = NULL
004FE0FA    FF95 F6844300   CALL DWORD PTR SS:[EBP+4384F6]//--VirtualAlloc
004FE12D    8BF0            MOV ESI,EAX
//--申请内存并将得到的内存首地址送入ESI
004FE14B    8D9D A96C4000   LEA EBX,DWORD PTR SS:[EBP+406CA9]
004FE156    50              PUSH EAX//--解码缓冲区
004FE157    53              PUSH EBX//--已压缩数据区
004FE158    E8 D7000000     CALL dbpe.004FE234//--UPX解码函数
004FE162    83C4 08         ADD ESP,8//--平衡堆栈
004FE181    56              PUSH ESI//--保存ESI(004FE1D3处REP指令会影响)
004FE1AF    8BC8            MOV ECX,EAX//--数据长度送入ECX
004FE1B6    8DBD A96C4000   LEA EDI,DWORD PTR SS:[EBP+406CA9]//--目标首地址指向已压缩数据区
004FE1D3    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]//--将UPX解码结果传送回已压缩数据区
004FE1DA    5E              POP ESI//--恢复ESI
004FE1E5    68 00800000     PUSH 8000//--FreeType = MEM_RELEASE
004FE1EA    6A 00           PUSH 0//--Size = 0
004FE1EC    56              PUSH ESI//--Address = 00370000
004FE1ED    FF95 F2844300   CALL DWORD PTR SS:[EBP+4384F2]//--VirtualFree
//--释放申请的缓冲区
004FE225    E9 9B010000     JMP dbpe.004FE3C5
004FE3DC    58              POP EAX//--恢复004FE07A处保存的EAX
004FE3E2    EB 43           JMP SHORT dbpe.004FE427
004FE427    60              PUSHAD
004FE428    83BD F06C4000   CMP DWORD PTR SS:[EBP+406CF0],0
004FE42F    75 00           JNZ SHORT dbpe.004FE431//--无聊指令
004FE431    61              POPAD
004FE47B    8985 DD7D4300   MOV DWORD PTR SS:[EBP+437DDD],EAX
//--?
004FE4B8    BE 447D4300     MOV ESI,dbpe.00437D44
004FE4D4    03F5            ADD ESI,EBP//--ESI指向一个pVersionInformation结构
004FE4DB    C706 94000000   MOV DWORD PTR DS:[ESI],94//--Sizeof pVersionInformation
004FE50E    56              PUSH ESI//--pVersionInformation = dbpe.0052F460
004FE50F    FF95 FA844300   CALL DWORD PTR SS:[EBP+4384FA]//--GetVersionExA
//--取操作系统版本
004FE52C    837E 10 02       CMP DWORD PTR DS:[ESI+10],2//--Platform_Windows_NT_2K_XP
004FE530    75 13            JNZ SHORT dbpe.004FE545//--去除花指令后回跳转到04FE54A处
004FE537    C685 D87D4300 01 MOV BYTE PTR SS:[EBP+437DD8],1//--设置Windows NT/2K/XP系列标志
004FE543    EB 11            JMP SHORT dbpe.004FE556//--跳出IF...ELSE结构
004FE54A    C685 D87D4300 00 MOV BYTE PTR SS:[EBP+437DD8],0//--取消Windows NT/2K/XP系列标志
004FE577      8D85 F56C4000      LEA EAX,DWORD PTR SS:[EBP+406CF5]
004FE5B5       80BD D87D4300 0 CMP BYTE PTR SS:[EBP+437DD8],1
004FE5BC       0F85 F74A0000   JNZ dbpe.005030B9

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功