多层外壳脱壳分析

逆向分析Enigma Protector加密DLL:重定位表修复与脱壳实战 在软件安全领域,代码保护与逆向分析是持续演进的技术对抗。理解PE文件格式和Windows加载器原理是分析加密二进制文件的基础。动态链接库(DLL)的重定位机制允许代码在不同基址加载,这是系统兼容性的关键。保护壳通过加密和混淆破坏标准PE结构,以对抗静态分析。Enigma Protector作为商业保护工具,其核心价值在于运行时解密和内存修复,使逆向工程师难以直接获取原始代码。应用场景包括软件授权保护、恶意代码分析和安全加固评估。本文聚焦于逆向分析Enigma Protector加密DLL时遇到的重定位表修复 阅读详情
【目    标】: Nnewell的某KeyGenMe
【工    具】:Olydbg1.1B(diy版)、LORDPE、ImportREC1.6F
【任    务】:.透视N层马甲(暴破),简单脱N层壳.
【操作平台】:winxp sp1
【作    者】:loveboom[DFCG][FCG]
【相关链接】: 见附件
【简要说明】:很久没有写什么文章,都快老了,我自己也终于结束了几年的网吧调试生活,就此献给所有的朋友,也算是献给男羽终于一次爬上TOP1的小礼吧,失误之处还请各位老大多多指教。我用Nnewell老大的东西出来骗一下MM,不知道老大有什么意见..如老大说不要这样的就我就删除本贴.
【详细过程】:
如果暴破来说,这个东西还是比较易的,牛老大说要写注册机,我水平没够所以就难一下,再说也没有空去分析算法。好了,搞定任务一.,透视N层马甲,再来强暴.
用od加载目标,去除调试标志.忽略全部异常。
加载并运行目标,这样第一次在这里异常:
042E137F    6285 0E0B0000   BOUND EAX,QWORD PTR SS:[EBP+B0E]       ;这里异常
042E1385    EB 02           JMP SHORT 042E1389
异常后,shift+f9继续,这样程序就运行了,现在看看od里怎么什么也没有了,不用紧张,“上有政策,下有对策”嘛,程序运行后,我们按一下F12怎么样,OD里有东西了吧,按f12断下后,按F9让程序继续,这样会有一个异常的提示,注意了,点那个消息框后按shift+f9而不要按f9,因为这样的话,等一下就死的好看的。好了,操作完毕后,ALT+M打开内存页,看看code段的baseimg是多少,原来是401000,,现在回到od的cpu窗口中,按ctrl+G跳到401000那里(当然这一步不是必需的),到主程序的段里后下断bp GetWindowTextA
在目标里输入你的大名和注册码,然后点register,这样会断在这里:
77D17FEC >  6A 0C           PUSH 0C        ;断在这里
77D17FEE    68 309DD677     PUSH USER32.77D69D30
断下后,alt+f9执行到返回:
0040D917    FF15 AA374100   CALL DWORD PTR DS:[4137AA]                ; 这里就是GetDlgItemTextA
0040D91D    A3 4C364100     MOV DWORD PTR DS:[41364C],EAX             ; 用户长度入地址,eax=用户名长度
0040D922    0BC0            OR EAX,EAX
0040D924    75 1F           JNZ SHORT KeygenMe.0040D945               ; 如果用户不为空就跳
0040D926    6A 00           PUSH 0                                    ; 注册名为空就跳到这里,也就是over的路
0040D928    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
0040D92B    FF75 10         PUSH DWORD PTR SS:[EBP+10]
0040D92E    FF75 08         PUSH DWORD PTR SS:[EBP+8]
0040D931    FF15 B0374100   CALL DWORD PTR DS:[4137B0]                ; 这里就是MessageBoxA了
0040D937    5B              POP EBX
0040D938    891D 5C364100   MOV DWORD PTR DS:[41365C],EBX
0040D93E    5F              POP EDI
0040D93F    5E              POP ESI
0040D940    5B              POP EBX
0040D941    C9              LEAVE
0040D942    C2 1800         RETN 18
0040D945    68 00010000     PUSH 100                                  ; 这里准备获取注册码
0040D94A    8D85 D0FAFFFF   LEA EAX,DWORD PTR SS:[EBP-530]
0040D950    50              PUSH EAX
0040D951    68 E9030000     PUSH 3E9                                  ; push id
0040D956    FF75 08         PUSH DWORD PTR SS:[EBP+8]
0040D959    FF15 AA374100   CALL DWORD PTR DS:[4137AA]                ; GetDlgItemTextA
0040D95F    A3 50364100     MOV DWORD PTR DS:[413650],EAX             ; 这里eax=注册码长度
0040D964    0BC0            OR EAX,EAX
0040D966    75 1F           JNZ SHORT KeygenMe.0040D987               ; 如果注册码不为空就跳
0040D968    6A 00           PUSH 0                                    ; 为空就不好玩了,为空走这里
0040D96A    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
0040D96D    FF75 14         PUSH DWORD PTR SS:[EBP+14]
0040D970    FF75 08         PUSH DWORD PTR SS:[EBP+8]
0040D973    FF15 B0374100   CALL DWORD PTR DS:[4137B0]                ; KeygenMe.0040E79E
0040D979    5B              POP EBX
0040D97A    891D 5C364100   MOV DWORD PTR DS:[41365C],EBX
0040D980    5F              POP EDI
0040D981    5E              POP ESI
0040D982    5B              POP EBX
0040D983    C9              LEAVE
0040D984    C2 1800         RETN 18
0040D987    8D85 D0FAFFFF   LEA EAX,DWORD PTR SS:[EBP-530]
0040D98D    50              PUSH EAX                                  ; 注册码入栈
0040D98E    E8 9D0D0000     CALL KeygenMe.0040E730                    ; 这个call把注册码转换为大写
0040D993    E8 2E0C0000     CALL KeygenMe.0040E5C6             ;这里要小心,在下一行下断,因为这个call里什么东西都不做,N多次异常在里面
0040D998    8D85 D0FAFFFF   LEA EAX,DWORD PTR SS:[EBP-530]
0040D99E    50               PUSH EAX
0040D99F    E8 9A0C0000      CALL KeygenMe.0040E63E                       ; 这个call判断注册码的合法性
0040D9A4    83F8 01          CMP EAX,1
0040D9A7    75 1F            JNZ SHORT KeygenMe.0040D9C8                  ; 如果合法就跳
0040D9A9    6A 00            PUSH 0
0040D9AB    FF75 0C          PUSH DWORD PTR SS:[EBP+C]                    ; 不合法就出错信息
0040D9AE    FF75 18          PUSH DWORD PTR SS:[EBP+18]
0040D9B1    FF75 08          PUSH DWORD PTR SS:[EBP+8]
0040D9B4    FF15 B0374100    CALL DWORD PTR DS:[4137B0]                   ; KeygenMe.0040E79E
0040D9BA    5B               POP EBX
0040D9BB    891D 5C364100    MOV DWORD PTR DS:[41365C],EBX
0040D9C1    5F               POP EDI
0040D9C2    5E               POP ESI
0040D9C3    5B               POP EBX
0040D9C4    C9               LEAVE
0040D9C5    C2 1800          RETN 18
0040D9C8    33DB             XOR EBX,EBX
0040D9CA    8B35 4C364100    MOV ESI,DWORD PTR DS:[41364C]                ; 注册名长度入esi
0040D9D0    8D95 D0FBFFFF    LEA EDX,DWORD PTR SS:[EBP-430]               ; 注册名入edx,我自己取的注册名是loveboom
0040D9D6    B8 01000000      MOV EAX,1                                    ; 初始赋值eax为1
0040D9DB    0FB64C10 FF      MOVZX ECX,BYTE PTR DS:[EAX+EDX-1]            ; 依次读取注册名的每一位,用于后面的运算
0040D9E0    8BF8             MOV EDI,EAX                                  ; a=1;for i=1 to 8
0040D9E2    83C7 03          ADD EDI,3                                    ; a=a+3 sasc=asc(mid(name,i,1))
0040D9E5    0FAFCF           IMUL ECX,EDI                                 ; b=sasc;b=b*a
0040D9E8    03D9             ADD EBX,ECX                                  ; c=c+b
0040D9EA    40               INC EAX
0040D9EB    3BC6             CMP EAX,ESI
0040D9ED    77 02            JA SHORT KeygenMe.0040D9F1                   ; 这里跳到下一步
0040D9EF  ^ EB EA            JMP SHORT KeygenMe.0040D9DB                  ; next
0040D9F1    8BC3             MOV EAX,EBX                                  ; 运算后的结果195e入eax
0040D9F3    99               CDQ
0040D9F4    69C0 C9430000    IMUL EAX,EAX,43C9                            ; 运算结果195e*43c9=6b784ce
0040D9FA    05 BBEF9505      ADD EAX,595EFBB                              ; eax=6b784ce+595efbb
0040D9FF    8BF0             MOV ESI,EAX                                  ; 计算后的结果放入esi中(0c4d7489)
0040DA01    56               PUSH ESI
0040DA02    68 00304100      PUSH KeygenMe.00413000                       ; ASCII "%1d"
0040DA07    8D45 D0          LEA EAX,DWORD PTR SS:[EBP-30]
0040DA0A    50               PUSH EAX
0040DA0B    E8 580D0000      CALL KeygenMe.0040E768                       ; JMP to USER32.wsprintfA
0040DA10    83C4 0C          ADD ESP,0C
0040DA13    8B0D 50364100    MOV ECX,DWORD PTR DS:[413650]
0040DA19    8D75 D0          LEA ESI,DWORD PTR SS:[EBP-30]
0040DA1C    8DBD D0FAFFFF    LEA EDI,DWORD PTR SS:[EBP-530]
0040DA22    FC               CLD
0040DA23    A6               CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
0040DA24    75 25            JNZ SHORT KeygenMe.0040DA4B                  ; 这里注册码和第一次的运算结果比较如果相算就完了
0040DA26    49               DEC ECX
0040DA27  ^ 75 FA            JNZ SHORT KeygenMe.0040DA23
0040DA29    C785 CCFAFFFF 01>MOV DWORD PTR SS:[EBP-534],1
0040DA33    6A 10            PUSH 10                                      ; 如果到了这里就不好玩了,下面就提示出错了
0040DA35    FF75 0C          PUSH DWORD PTR SS:[EBP+C]
0040DA38    FF75 1C          PUSH DWORD PTR SS:[EBP+1C]
0040DA3B    FF75 08          PUSH DWORD PTR SS:[EBP+8]
0040DA3E    FF15 B0374100    CALL DWORD PTR DS:[4137B0]                   ; KeygenMe.0040E79E
0040DA44    5B               POP EBX
0040DA45    891D 5C364100    MOV DWORD PTR DS:[41365C],EBX
0040DA4B    C785 CCFAFFFF 00>MOV DWORD PTR SS:[EBP-534],0                 ; 不相等就跳到这里
0040DA55    5F               POP EDI
0040DA56    5E               POP ESI
0040DA57    5B               POP EBX
0040DA58    C9               LEAVE
0040DA59    C2 1800          RETN 18
返回到这里:
0040DFD1    E8 F0050000      CALL KeygenMe.0040E5C6      ;这里大概看一下,因为好晚了,也因为我想睡所以没有跟下去找算法
0040DFD6    8D85 9CE3FFFF    LEA EAX,DWORD PTR SS:[EBP-1C64]
0040DFDC    50               PUSH EAX
0040DFDD    8D85 9CE7FFFF    LEA EAX,DWORD PTR SS:[EBP-1864]
 
上面的call进来看到一个异常,我就没跟了:
0040E5C6    C705 94314100 F5>MOV DWORD PTR DS:[413194],KeygenMe.0040E5F5
0040E5D0    892D 90314100    MOV DWORD PTR DS:[413190],EBP
0040E5D6    68 31104000      PUSH KeygenMe.00401031                               ; 异常回到的地方
0040E5DB    64:FF35 00000000 PUSH DWORD PTR FS:[0]                                ; 这里准备异常了
0040E5E2    8925 8C314100    MOV DWORD PTR DS:[41318C],ESP
0040E5E8    64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0040E5EF    33F6             XOR ESI,ESI
0040E5F1    33C0             XOR EAX,EAX                                          ; 这里开始异常了
0040E5F3    8900             MOV DWORD PTR DS:[EAX],EAX
0040E5F5    64:8F05 00000000 POP DWORD PTR FS:[0]
懒了,没跟下去,直接在下面找到那个跳转.
0040E054    E8 5EFBFFFF      CALL KeygenMe.0040DBB7
0040E059    23C0             AND EAX,EAX              ;这里置eax为1就暴破了
0040E05B    74 1F            JE SHORT KeygenMe.0040E07C
0040E05D    8D85 9CEFFFFF    LEA EAX,DWORD PTR SS:[EBP-1064]
0040E063    50               PUSH EAX
0040E064    8D85 3AFAFFFF    LEA EAX,DWORD PTR SS:[EBP-5C6]
0040E06A    50               PUSH EAX
0040E06B    8D85 D6FAFFFF    LEA EAX,DWORD PTR SS:[EBP-52A]
0040E071    50               PUSH EAX
0040E072    FF75 08          PUSH DWORD PTR SS:[EBP+8]
0040E075    E8 C9F7FFFF      CALL KeygenMe.0040D843                    ;这里进去就是MessageBoxA
0040E07A    EB 1D            JMP SHORT KeygenMe.0040E099
到此暴破完毕,在上面要注意一下的就是程序有了不少异常来干扰我们的视线,特别注意的是,遇到int3的时候一定要记得按shift+f9.下面进入第二个环节,脱掉它全部的马甲,让它“全祼”.
如果只是脱的话,一下就脱掉了,我想讲讲大概的方法,最后快速脱壳
再次载入目标.设置不变:入口处看到不少90,但有一句明显的jmp eax,所以直接到jmp eax处
00438029    90               NOP
0043802A    90               NOP
0043802B    B8 01604300      MOV EAX,KeygenMe.00436001
00438030    FFE0             JMP EAX              ;载入后f4到这里
现在看到第一层壳了:
00436001    60               PUSHAD
00436002    E8 03000000      CALL KeygenMe.0043600A
00436007  - E9 EB045D45      JMP 45A064F7
peid说是PENinja -> +DZA Kracker/TNT!的壳,不过我看到之后倒觉得是aspack来的.
到第一层壳处按f7到这里
0043601C    81EB 00600300    SUB EBX,36000
00436022    83BD 22040000 00 CMP DWORD PTR SS:[EBP+422],0
00436029    899D 22040000    MOV DWORD PTR SS:[EBP+422],EBX                       ; KeygenMe.00400000
0043602F    0F85 65030000    JNZ KeygenMe.0043639A
现在直接在43639a处按f4运行到那里,到达后(这个过程可能慢一点)按几次f8到一个新地方了:
00435000    55               PUSH EBP
00435001    8BEC             MOV EBP,ESP
00435003    6A FF            PUSH -1
00435005    68 14135200      PUSH 521314
这里不是OEP来的,原因:你看看相关代码就明白了,再按一会f8到第二层壳了
这里第二层
00427000    60               PUSHAD
00427001    E8 00000000      CALL KeygenMe.00427006
00427006    5D               POP EBP
这里就不要一步一步跟了,因为跟过一两次之后就知道,这个壳有点像svkp来的,所以到这里后,我们按f9运行,这样就会出现svkp典型异常
042E137F    6285 0E0B0000    BOUND EAX,QWORD PTR SS:[EBP+B0E]       ;这里异常
042E1385    EB 02            JMP SHORT 042E1389
异常后,我们在code段按f2,下断后,shift+f9运行,这样就到这里:
0430B6B1    8A06             MOV AL,BYTE PTR DS:[ESI]        ;断在这里
0430B6B3    46               INC ESI
0430B6B4    47               INC EDI
0430B6B5    8843 0F          MOV BYTE PTR DS:[EBX+F],AL
0430B6B8    8A46 FF          MOV AL,BYTE PTR DS:[ESI-1]
0430B6BB    55               PUSH EBP
0430B6BC    E8 00000000      CALL 0430B6C1
0430B6C1    5D               POP EBP
0430B6C2    81ED 0D470000    SUB EBP,470D
0430B6C8    8A8D 50030000    MOV CL,BYTE PTR SS:[EBP+350]
0430B6CE    5D               POP EBP
0430B6CF    32C1             XOR AL,CL
0430B6D1    8847 FF          MOV BYTE PTR DS:[EDI-1],AL
0430B6D4    8BC5             MOV EAX,EBP
0430B6D6    4D               DEC EBP
0430B6D7    85C0             TEST EAX,EAX
0430B6D9  ^ 75 A4            JNZ SHORT 0430B67F
0430B6DB    33C0             XOR EAX,EAX
0430B6DD    5D               POP EBP
0430B6DE    5F               POP EDI
0430B6DF    5E               POP ESI
0430B6E0    5B               POP EBX
0430B6E1    C2 1400          RETN 14               ;直接F4到这里
现在再在code段F2下断并运行,这样很快就到了第三个壳的地方:
第三层(好像是早期的aspr来的):
00401000    68 01504100      PUSH KeygenMe.00415001              ;呵呵,直接停在这里
00401005    E8 01000000      CALL KeygenMe.0040100B
0040100A    C3               RETN
看到早期的aspr的就好办了,取消内存异常,第十六次异常后停在这里:
0040E5F3    8900             MOV DWORD PTR DS:[EAX],EAX
0040E5F5    64:8F05 00000000 POP DWORD PTR FS:[0]
0040E5FC    83C4 04          ADD ESP,4
0040E5FF    C705 94314100 33>MOV DWORD PTR DS:[413194],KeygenMe.0040E633
0040E609    892D 90314100    MOV DWORD PTR DS:[413190],EBP
0040E60F    68 31104000      PUSH KeygenMe.00401031
0040E614    64:FF35 00000000 PUSH DWORD PTR FS:[0]
0040E61B    8925 8C314100    MOV DWORD PTR DS:[41318C],ESP
0040E621    64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0040E628    33DB             XOR EBX,EBX
0040E62A    33D2             XOR EDX,EDX
0040E62C    B8 02000000      MOV EAX,2
0040E631    F7F3             DIV EBX
0040E633    64:8F05 00000000 POP DWORD PTR FS:[0]
0040E63A    83C4 04          ADD ESP,4
0040E63D    C3               RETN                   ;直接在这里下f2,然后shift+f9就会运行到这里的.
停在retn处后,再按一次f8就到了程序的OEP:
0040E707    6A 00             PUSH 0                 ;OEP
0040E709    68 EBDB4000       PUSH KeygenMe.0040DBEB
0040E70E    6A 00             PUSH 0
到此oep就找到了,用impr用level1找一下就剩2个无效的api,用aspr1.22的插件或手工都轻松搞定。
知道怎么回事之后,我现在要快速脱它,
载入目标,按f9运行程序,异常后再在code段下f2――>shift+f9然后,f4到retn 14处à在code段下f2àf9运行这样到了aspr层,后面的按aspr的方法就可以一下搞定,我自己是写一下脚本:
var cbase
var csize
var count
 
gmi eip,CODEBASE
mov cbase,$RESULT
gmi eip,CODESIZE
mov csize,$RESULT
mov count,10
 
start:
   run
 
lbl1:
  bprm cbase,csize
  esto
 
lbl2:
  bpmc
  findop eip,#C21400#
  go $RESULT
 
lbl3:
  bprm cbase,csize
  run
 
lbl4:
  bpmc
  cmt eip,"取消内存异常项,然后按resume继续!"
  pause
 
lbl5:
  eoe lbl6
  run
 
lbl6:
  cmp count,0
  je lbl7
  sub count,1
  esto
  jmp lbl6
 
lbl7:
  findop eip,#C3#
  bp $RESULT
  eob lbl8
  eoe lbl8
  esto
 
lbl8:
  bc $RESULT
  sto
  cmt eip,"Hehe!"
  ret
到此就算基本解决问题了。
 

【总    结】:
好想睡了,各位看官自己看看有什么问题,明天再说吧.


Thanks:

Fly 辉仔yock、jingulong、tDasm、David、ahao、ufo(brother)、alan(sister)、所有曾经关心支持或帮助过我的朋友!谢谢您们!

                    by  loveboom[DFCG][FCG]                           
                     Email:bmd2chen@tom.com
从乱码到清晰:使用de4dot为C#程序脱壳与dnSpy逆向实战 本文详细介绍了如何使用de4dot工具为C#程序脱壳,并结合dnSpy进行逆向工程实战。通过具体案例演示了从混淆代码到清晰可读的完整流程,包括自动检测加壳类型、移除混淆保护和修复程序集结构等关键步骤,帮助开发者有效解决逆向工程中的常见难题。 阅读详情

相关推荐

CTF逆向实战:从UPX脱壳到算法分析的完整流程

逆向工程是信息安全领域的核心技术之一,它通过对二进制程序的分析,理解其内部逻辑与工作原理。这项技术广泛应用于软件安全评估、漏洞挖掘和恶意代码分析。其核心价值在于将“黑盒”程序转化为可理解的“白盒”,从而揭示隐藏的功能或漏洞。在CTF竞赛和实际安全研究中,逆向分析常涉及加壳程序的处理,例如UPX等压缩壳会包裹原始代码以增加分析难度。掌握查壳与脱壳技术是逆向分析的起点,使用Detect It Easy等工具识别壳类型后,可通过官方UPX工具或手动调试进行脱壳。脱壳成功后,借助IDA Pro进行静态分析,理解程序

weixin_34187862的博客 381

各种壳的脱法及技巧

各种壳的脱法及技巧 常见脱壳知识: 1.PUSHAD (压栈) 代表程序的入口点 2.POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个,说明OEP可能就在附近 3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳 1、模拟跟踪法 无暗桩情况下使用 1.F9试运行,跑起来就无SEH暗桩之类的,否则就有. 2.ALT+M打开内存镜像,找到包含“=sfx,imports reloco tions”字符 3.地.

weixin_43781139的博客 1412

逆向工程脱壳技术:从原理到实战的完整指南

在软件安全领域,逆向工程是一项关键技术,它涉及对程序内部结构和逻辑的分析。其核心原理是通过调试、反汇编等手段理解软件运行机制,技术价值在于漏洞挖掘、安全审计和算法学习。应用场景广泛覆盖移动安全、软件保护和游戏安全等领域。其中,脱壳作为逆向工程的基础环节,特指移除软件保护层以获取原始代码的过程。内存转储和调试跟踪是常见脱壳方法,需结合反调试对抗技术。本文聚焦UPX压缩壳和Android加固壳的实战案例,详解工具链使用与问题排查,帮助掌握这一工程实践技能。

weixin_42539414的博客 314

ASPROTECT 2.0 脱壳示例

ASPROTECT  2.0 脱壳示例【目    标】:Win98’s notepad【工    具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F【任    务】:简单的脱一下asprotect的壳【操作平台】:Windows Xp sp2【作    者】:loveboom[DFCG][FCG][US]【简要说明】:有一段时间没写文章了,这篇文章本来是想在奥运会那时写

loveboom's Reverse Enginering 2631

软件逆向工程中的脱壳技术:从原理到实战应用

在软件安全与逆向工程领域,程序保护机制是核心研究课题之一。软件加壳技术通过加密、混淆和虚拟化等手段,对原始代码进行保护,旨在防止逆向分析和未授权修改。其基本原理是在程序外层包裹保护层,运行时动态解密原始代码并修复关键数据结构。这项技术的工程价值在于,理解加壳原理有助于进行恶意软件分析、软件兼容性调试和安全评估。在实际应用场景中,安全研究人员需要对不同保护强度的壳采取相应策略,例如针对VMPROTECT等强虚拟化壳,通常采用关键点定位而非完全还原的方法;而对于THEMIDA等商业保护壳,则需要结合内存断点和异

weixin_29323049的博客 372

多种脱壳软件

一.脱壳机名字的由来 skylly's CoolDumpper,借用了看雪论坛里高人某个让人流口水的工具的名字 界面也是盗版的CoolDumpper,不过本人盗版技术不高,做成了个四不像~~ 二.脱壳机的原理 由以下几大要部分组成, 1.侦壳功能. 完全拷贝自看雪论坛“任平生”的代码 2.Dummpper(进程转存) 初期,完全拷贝自lenus的lenus's Dummper代码, 现在为了适应脱壳的需要,发现原来的代码对非标准格式的PE文件的处理有些小问题, 所以代码基本都重写过了,但是基本处理步骤还是一致的,外表上看不出来 3.cooldebugger plugin(调试插件) 完全自主开发的插件,说是调试器其实没有用调试,而是注入,然后进行一些最简单的内存操作,没有 什么技术含量,可以完美躲过调试器检测的壳,对于内存检验比较强的壳可能不是很好用。 4.真正意义上的调试器 用最简单的调试API做的一个具有基本功能的调试器,目前还不能用于脱壳,只是一个玩具,为了将来扩展用的。 但是hook api始终不是很妥当,总会让壳有机可乘,以后可能会考虑加入驱动,驱动最让我不放心的是它的稳定性。 三,关于源码 由于还在开发中,暂不开源(主要是怕被人拿去篡改,反而让人以为他是正宗,我是盗版) 等到我不再开发时,会开放全部源代码,技术这东西,共享才是王道。 四。使用说明。 我想不用说太多了吧,选择目标文件后(支持拖放),再选择对应的插件,再点击脱壳按钮就可以了。可以说是接近傻瓜化了... 几个子功能说明: 详细日志:是调试器用的 PE标准化:是对某些被改得乱七八糟的壳(如upack)进行简单的PE修复 移除自校验:这个功能可以说是没有设计好,不同的壳自检验的地方不一样, 所以处理也应该不一样,可按照现有的工作模式又不可能把它做到plugin(插件)里面去, 但是,总之我会加进去的。 第x次调用API中断:这个功能是从CoolDumpper那儿抄袭界面遗留下来的,光有界面,未实现功能,将来如果有自动脱壳搞不定 的壳时,可能可以把这个地方扩展成手动脱壳。 OEP输入框和IAT输入框:功能已经弱化,由脱壳插件自动完成。 纠正映象大小:功能已经弱化,已经由dumpper自动完成。 五。关于private版本. 由于种种原因,不再发布public版本,仅作为私下交流之用。 所谓私下交流,可以算一种"精华"门槛吧. 1.看雪论坛或者一蓑烟雨,30精以上的朋友(高手)或者500帖以上的朋友(超级水牛),或者30贴以内且精华率在1/3以上的(超级高手)随时可以向我索要最新版。不过我相信高手们只会把我这个东西当玩具玩玩而已。 2.在使用这个脱壳机过程中遇到比较严重的问题或者不能脱的壳,可以来E-mail和我交流,欢迎技术交流,谢绝任何形式的脱壳请求, 因为我只是个菜鸟。对于有价值的来信,我会酌情回复最新版脱壳机。 得到这个脱壳机的人,任由其处置。 六。开发目标 开发常见压缩壳和加密壳的插件并实现自动脱壳。 压缩壳插件做十个左右,加密壳插件做二十个左右。 压缩壳插件: upx, upack, aspack, nspack, mew, hmimys, pecompact, expressor, fsg, kbys, packman, PEncrypt (已经基本完成。) 加密壳插件:(还没想好,暂定, 刚刚开始开发) pe-armor, armadillo, aspr, acpr, telcok, execrypt, pelock, pc-guard, morphine, safedisc, themida, enigma, obsidium, starforce, yoda_s_cryptor, epe, pespin, svkp, sdp.............. 预估主程序最终版本版本号:2.0 预估所有插件最终版本号:0.3 已知bug: 1.由于修复输入表是用的ImpRec.dll这个动态链接库,我没有源码,它在处理某些IAT不连续的程序时,获取的IAT的大小有问题,所以暂时还没 有解决方案来对付,等我复习好输入表结构,以后脱壳机就自己来重建输入表了,呵呵。 2.无法对付多层壳. 3.处理自校验有问题,请不要随便选中,否则后果自负 现在发布的这个版本仅仅代表了一个脱壳机的起步阶段,当玩具吧。

外挂脱壳示例一

Hying旧版壳的简单脱壳【目     标】:天堂xxxx(因为是外挂,所以不写全名)【工     具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F 【任     务】:简单的脱一下目标的壳 【操作平台】:WinXP sp2【作     者】:loveboom[DFCG][FCG][US]【相关链接】: 自己去上网搜搜【简要说明】: 这个一个很旧的Hying的壳了,现

loveboom's Reverse Enginering 5357

通用脱壳工具

通用脱壳工具,AoRE_Unpacker.exe,这只是其中一个,后面还将上传其他的。

软件的壳和壳的含义、概念以及加壳和脱壳方法

软件的壳和壳的含义、概念以及加壳和脱壳方法 PE(Portable Executable) 也就是EXE和DL)文件所具有的起压缩、加密、保护作用的东西。可以用PEiD等软件查壳。 加壳通过修改程序入口点等压缩、加密、保护EXE和DL. 在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑。自然界中植物用它来保护种子,动物用它来保护身体等等。 软件的壳分为加密壳、压缩壳、...

Hemy 9181

脱壳软件Peid使用方法

我们最常用到的功能有: 1、查看入口点。即程序的入口地址。查入口点的软件有很多,几乎所有的PE编辑软件都可以查看入口点。 2、查看软件加的什么壳。这个软件加的是UPX 0.89.6 插件应用。最常用的插件就是脱壳。Peid的插件里面有个通用脱壳器,能脱大部分的壳,如果脱壳后import表损害,还可以自动调用ImportREC修复improt表。

风光储互补微电网在偏远地区的应用实践:从建模到仿真全解析

本文深入解析了风光储互补微电网在偏远地区的应用实践,从系统设计到仿真建模全流程。通过Simulink等工具进行动态仿真,验证了系统在多种工况下的可靠性,并结合实际案例展示了其显著的经济和环保效益。文章为从业者提供了从技术路径到实施优化的全面指导。

weixin_29047545的博客 271

【转】脱壳工具

脱壳工具http://www.pediy.com/tools/unpacker.htm 文件类型侦测工具 peid 0.94

学习........ 4393

微信小程序一键登录和临时code用JWT进行微信用户授权

2、跨域进行调用接口时候,唯一标识UnionID和会话密钥 session_key如果还是用的我自己的,会出现无法调用微信服务器接口,就需要将唯一标识和会话密钥换成前端的,才可以,我自己认为这样很不合理,暂时还没有找到原因。2、能够获取到openId,但是也只能获取到openid,无法获取用户的相关信息,经过查阅官网发现,现在微信那边已经将用户信息加密,需要调用提供的接口进行解密然后获取用户数据,问题原因已经找到解决方法,还未即使更改。1、我这是一台电脑实现的前端调用后端接口,不用考虑跨域的问题。

qq_67653492的博客 5717

逆向分析破解一款会务管理软件

声明:请支持使用正版软件,尊重原作者的劳动成果,此文只做技术交流,如有他人利用,产生后果,不负任何责任。               最近破解一款会务管理软件,用PEid侦查外壳,发现是是穿山甲的 外壳,                  但是还是无法显示出完整的信息出来 可以发现 Upx0,UPX1的节段,说明,加了双层外壳,还有一层UPX的压缩壳,首先用OD打开这个软件

浪子_三少(邮箱:basketwill@qq.com) 3348

rv1126平台spi屏调试

st7789v2 i2c调试

zuoanyouzhuan_的博客 2039

基于TI C2000的CCS安装与工程创建完整示例

手把手演示基于TI C2000系列的CCS安装过程及首个工程创建步骤,涵盖环境配置与常见问题处理,助力快速上手嵌入式开发,ccs安装和工程搭建不再难。

weixin_42476987的博客 972

软件逆向工程核心技术:脱壳原理与实战分析

在软件保护领域,"壳"是一种常见的程序包装技术,其核心功能是通过压缩或加密手段对原始程序(目标程序)进行保护。脱壳,即**外壳移除(Unpacking)**,是逆向工程中至关重要的技术环节,指通过分析PE文件结构、跟踪壳代码执行流程,最终将被保护程序还原为可正常分析的原始形态的过程。这项技术不仅是软件安全审计的基础,也是恶意代码分析、软件版本回溯的关键手段。脱壳技术不仅是逆向工程的基础技能,更是理解软件保护机制的关键窗口。

攻城狮7号的博客 2862

Synopys 验证系列-EDA 总结

VC Formal 解决方案包括一整套正式应用程序 (App),包括属性验证 (FPV)、自动提取属性 (AEP)、覆盖分析器 (FCA)、连接性检查 (CC)、时序等效性检查 (SEQ)、寄存器验证 (FRV)、测试平台分析仪 (FTA)、形式导航器 (NAV) 以及用于验证标准总线协议的一组断言 IP (AIP)。

qq_41289491的博客 1428

黑客逆向破解基础-1:壳、加壳和脱壳分别是什么?加壳的解压原理介绍。

一、壳的概念 壳的概念,在一些计算机软件里有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了...

JankinChan的博客 1万+

深度学习助力台风路径预测:技术剖析与实战应用全攻略(基于LSTM模型)

摘要:深度学习技术在台风路径预测领域展现出巨大潜力。通过融合多源气象数据,深度学习模型如LSTM能有效处理时间序列数据,捕捉台风路径变化规律。与传统方法相比,深度学习模型在自动特征学习和处理复杂模式方面具有独特优势,提高了预测的准确性和实时性。然而,挑战依然存在,包括数据质量问题、模型可解释性不足以及极端台风的复杂性。未来,随着观测技术的进步和新算法的开发,深度学习将在台风路径预测中发挥更大作用,为防灾减灾提供更精准的决策支持。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2229

2026华为OD面试手撕代码真题目录

一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解。不可能会再出阅读理解一样的机试题的。但是这些题目也非常注意基本功,很注意细节的处理,一般都是easy+medium题目。但是大家一定要注意,因为大部分面试官上面一开始就会让你做题,直接看你所有的做题过程(防止有人水平一般,机试就网上找的答案的蒙混过关),手撕代码题会给你后面的面试定一个基调。

MISAYAONE的博客 9万+

PE程序常见脱壳方案

理解PE结构是成功脱壳的前提,加壳程序的核心策略就是通过篡改、加密或隐藏原始PE头信息来保护代码,这意味着脱壳不仅要还原代码本身,更要正确修复被破坏的PE结构,否则即使成功dump出内存镜像,程序依然无法正常运行。在入口对RSP附近内存设置内存写入断点,这里我选择RSP+4的位置,因为x64程序的四寄存器快速调用约定是由调用方在调用堆栈上分配空间作为影子存储,供被调用方保存这些寄存器,被调用方通常需要把参数寄存器保存到影子存储栈里。对于软件保护而言,壳只是第一道门,代码虚拟化和混淆才是真正的保险库。

VBP_2025的博客 825

【模型】OpenClaw 接入阿里云永久免费模型方案

Qwen2.5-7B-Instruct 模型为例。

海兰 4474

[逆向] 2.加壳脱壳之UPX

UPX是一款开源可执行文件压缩工具,能减少程序体积50%-70%而不影响运行。文章介绍了UPX的核心概念(加壳/脱壳)、Windows环境下的安装配置方法,以及常用命令详解。特别强调了适用场景(C/C++等原生程序)与不适用场景(.NET/Java等)。提供了安全压缩工作流、批量处理技巧和构建流程集成建议,并针对常见问题给出解决方案。核心建议包括:确认程序类型、保留备份、立即验证和使用最新版本。UPX在合适场景下能显著优化程序分发效率。

梅山老妖的博客 1741

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

菜鸟脱壳之脱壳的基础知识(一)

脱壳技术一、基础知识壳的定义:在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了,无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密…...

banhanjun1518的博客 390

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

病毒加壳技术与脱壳技术

由于大量的杀毒软件的出现,以及杀毒软件病毒库的不断壮大,病毒被查杀的几率也越来越大。所以有些病毒就开始通过加壳的方法来伪装自己,企图骗过杀毒软件,蒙混过关。为了做好病毒防御,我们就该了解什么是加壳?加壳的对立面是不是脱壳?如何脱壳等?    一 什么是壳:    计算机软件里有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任

B_H_L的专栏 5089

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: PesPin 0.7外壳分析
下一篇: 外挂脱壳示例一
bmd2chen
博客等级 码龄23年 34粉丝 45原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值