浅谈脱壳中的Dump技术

DeepStream系列之SDK文件夹解析 在《DeepStream4.0系列之SDK文件夹解析》一文中,对 SDK 的目录结构进行了一个介绍。随着内容的更新,在 5.0、5.1、6.0 版本中又新增了很多实用功能,提供了很多有价值的示例代码,本文以 jetson 端的 SDK 为例,对新增的内容进行一个介绍(与 4.0 版本相比)首先使用 tree -d 指令查看 sdk 的目录结构,输出如下,其中,红色加粗的内容表示是新增内容可以看到,samples 文件夹中主要增加了对 triton 和 tao 工具链的支持,提供了各种配置... 阅读详情

看完第一章实践一下:主要功能就是Dump,科普一下 对于dump来说,他的英文翻译就是“转存”。也就是说把内存中或者其他的输入转存到另一个位置,当然对于我们现在说的dump就是把内存中运行的PE进程的数据,从内存中抓取出来,然后在用文件的形式保存下来。

代码如下:

 unit Unit1111;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TlHelp32;

type
  TForm1 = class(TForm)
    pnl1: TPanel;
    btn1: TButton;
    btn2: TButton;
    lst1: TListBox;
    dlgSave1: TSaveDialog;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
 
  private
    { Private declarations }
  
      mypr32:PROCESSENTRY32;
      imagesize:Cardinal;
      mprocess :Cardinal;
  public
    { Public declarations }
    function GetProccesList (): Boolean;
    function DumProces(): string;
    function DumpFile(Name:string): Boolean;
    function CheakPE  (IsPe:string):THandle;
    procedure getsize(isize:Cardinal);

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.DumProces ():string ;
var
   inum: string ;
begin
      inum:=Lst1.Items[Lst1.ItemIndex];
      DumProces:=inum;
end;

function TForm1.CheakPE(IsPe:string) :THandle;

var
  Process:Cardinal;
  mread:Cardinal;
  mflag:Cardinal ;
   WMax: DWord;
  NTag: DWord;
  ImageDosHeader    : IMAGE_DOS_HEADER;
  //ImageNtHeaders    : IMAGE_NT_HEADERS;
  //ImageSectionHeader: IMAGE_SECTION_HEADER;

begin

    Process:=0;
    //ImageDosHeader:=
    mflag:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)  ;
          if (mflag = GetLastError()) then
          begin
              ExitProcess(Null);
          end ;
          mypr32.dwSize:=SizeOf(TPROCESSENTRY32);
          if Process32First(mflag,mypr32) then
          begin
             while Process32Next(mflag,mypr32) do
             if mypr32.szExeFile=IsPe then
             begin
             Process:=mypr32.th32ProcessID;
             //ShowMessage(IntToStr(Process));
             Break;
             end;

          end;

     mprocess:= OpenProcess(PROCESS_VM_READ,False,Process);
     //ShowMessage(IntToStr(mprocess));
     if (ReadProcessMemory(mprocess, Pointer($00400000), @WMax, 2, NTag))  then
              //ShowMessage('ok')
     else

            ShowMessage(IntToStr(GetLastError()));
     //ShowMessage(Format('%x',[WMax]));
         mread:=SizeOf(ImageDosHeader) ;
          mread:=mread-$4 ;
      if (WMax = $5A4D) then
        // ShowMessage(Format('%x',[WMax]));
       if (ReadProcessMemory(mprocess, Pointer($00400000+mread),@WMax, 2, NTag))
       then
          //ShowMessage(Format('%x',[WMax]));
           mread:=WMax;

         if (ReadProcessMemory(mprocess, Pointer($00400000+mread),@WMax, 2, NTag))
         then
           //ShowMessage(Format('%x',[WMax]));
           if (WMax = $4550) then
           begin
              //ShowMessage(Format('%x',[WMax]));
             
           end;
           mread:=mread+$50;
              if (ReadProcessMemory(mprocess, Pointer($00400000+mread),@WMax, 4, NTag))
              then
                //ShowMessage(Format('%x',[WMax]));
                imagesize:=WMax;
           Result:=Process ;
end;

function TForm1.DumpFile (Name:string):Boolean ;
var
  writeDW,oldG,Gall:Cardinal;
  SI: TSystemInfo;
   mbi_thunk:TMemoryBasicInformation;
    WMax,NTag:Cardinal;
    resize:DWord;
     hndl2:Cardinal;
       adder,adder1:Cardinal;
begin  
  resize:=0;
         if CheakPE(Name)>0 then
         begin
           GetSystemInfo(SI);
           //ShowMessage(IntToStr(SI.dwAllocationGranularity) );
            Gall:=GlobalAlloc(GMEM_FIXED,SizeOf(imagesize));
            oldG:=Gall;
            adder:=$00400000;
            mbi_thunk.AllocationBase:=Pointer(Gall) ;
            mbi_thunk.RegionSize:=resize;
             mbi_thunk.BaseAddress:=Pointer($00400000);
             //mbi_thunk.AllocationProtect=PAGE_READWRITE;
             // mbi_thunk.State=MEM_FREE;


           while ((adder-$00400000)<=imagesize) do
           begin

            VirtualQueryEx(mprocess,Pointer(adder),mbi_thunk,sizeof(TMemoryBasicInformation));
            if mbi_thunk.Protect=PAGE_READWRITE then
               ExitProcess(0)
            else
            ReadProcessMemory(mprocess, Pointer(adder),@WMax, 4, NTag);
            WriteProcessMemory(mprocess, mbi_thunk.AllocationBase,@WMax, 4, NTag);
            adder:=adder+$4;
            Gall:=Gall+$4 ;
            mbi_thunk.AllocationBase:=Pointer(Gall);
           end;

             //ShowMessage('save file');
             dlgSave1.Filter   :='*.exe';
             dlgSave1.filename :='Dump.exe';
             adder1:=$00400000;
              if   dlgSave1.Execute   then
              begin

                   hndl2:=CreateFile(pchar(dlgSave1.filename),GENERIC_WRITE or GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,
                                     CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
                  if hndl2 =INVALID_HANDLE_VALUE then
                  ExitProcess(0)
                  else
                   //ShowMessage(IntToStr(GetLastError()));
                   while (adder1-$00400000)<= imagesize   do
                   begin
                     //ReadFile(hndl2,oldG,4,writeDW,nil);
                     WriteFile(hndl2,oldG,4,writeDW,nil);
                     oldG:=oldG+$4;
                     adder1:=adder1+$4;
                   end;
                   CloseHandle(hndl2);
                  
               end
              else
              GlobalFree(Gall);
              dlgSave1.Free;


            
         end;

        Result:=True;
end;

function TForm1.GetProccesList():Boolean;
var

 

  mflag:THandle ;

   begin
          mflag:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)  ;
          if (mflag = GetLastError()) then
          begin
              ExitProcess(Null);
          end ;

          mypr32.dwSize:=SizeOf(TPROCESSENTRY32);

 

          if Process32First(mflag,mypr32) then
          begin
             while Process32Next(mflag,mypr32) do
             lst1.Items.Add(mypr32.szExeFile);

          end;
          Result:=True;

   end;

procedure TForm1.btn1Click(Sender: TObject);
begin
    lst1.Clear;
    GetProccesList();
end;
 procedure TForm1.getsize (isize:Cardinal);
 var
   sum:Cardinal;
 
 begin
      sum:=$1000;
      if((isize mod sum)=0) then
           imagesize:=isize
      else
           imagesize:=Trunc((isize/sum+$1)*(sum));
 end;

 


procedure TForm1.btn2Click(Sender: TObject);
var
  restr:string;
begin


       restr:=DumProces();
       //MessageBox(Handle,PAnsiChar(restr),'',0);
       getsize(imagesize);
       DumpFile(restr);

end;

 

end.

最后说一下写的比较烂不太好用 因为懒得调试!最近又在搞别的东西,有空的话再搞一下。

[1197]脱壳工具dumpDex、frida_dump、BlackDex dumpDex: 一个开源的 Android 脱壳插件工具,需要xposed支持。可以用来脱掉当前市场上大部分的壳。(360加固、腾讯乐固、梆梆加固、百度加固均可脱壳)支持大多数xposed环境的手机,暂不支持模拟器github地址:https://github.com/WrBug/dumpDex,可以直接下载release的apk,也可以自行编译打包成apk安装到手机。 阅读详情

相关推荐

思科模拟器CIsco Packet Tracer利用三层交换机实现VLAN间路由

版权声明:如果对大家有帮助,大家可以自行转载的。 1.技术原理: 三层交换机具备网络层的功能,实现 VLAN 相互访问的原理是:利用三层交换机的路由功能,通过识别数据包的 IP 地址,查找路由表进行选路转发,三层交换机利用直连路由可以实现不同 VLAN 之间的相互访问。三层交换机给接口配置 IP 地址。采用 SVI(交换虚拟接口)的方式实现 VLAN 间互连。SVI 是指为交换机中的VLAN 创建...

qq_37992321的博客 1万+

菜鸟脱壳之脱壳的基础知识(二) ——DUMP的原理

菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即EntryPoint,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向OEP,类似一个壳与程序入口点的“分界线!当我们到达了程序的OEP,我们就需要进行DUMP程序了,那么什么时候去DUMP一个程序呢?这里我引用了fly的一句话!“手动脱壳理想的最佳dump时机...

banhanjun1518的博客 779

实战指南:将MediaPipe封装为Windows DLL,实现C++/C#高效调用

在计算机视觉和多媒体处理领域,跨平台框架为开发者提供了强大的算法模型和计算能力。其核心原理在于通过预训练的机器学习模型和优化的计算图,实现对图像、视频流中特定目标(如人脸、手势、姿态)的实时检测与分析。这项技术的价值在于能够将复杂的AI能力模块化,降低应用开发门槛。在实际工程实践中,为了突破特定语言生态的限制并优化部署流程,开发者常需将核心功能封装成独立的库。例如,将Google的MediaPipe框架封装为Windows动态链接库(DLL),就是一个典型的工程实践。此举能有效解决语言壁垒和部署简化问题,使

weixin_28691741的博客 360

脱PESpin 壳(详细步骤)

脱壳——PESpin 壳PESpin 壳1 寻找OEP1.1 反硬件断点1.2.1 测试11.2.2 测试2静态分析1.2 寻找 OEP 方法22 OEP 处 Dump 内存到文件3 修复 IAT4 Script4.1 查看脚本修复后的 IAT5 重建 IAT 表 程序连接见结尾 PESpin 壳 // 这个壳 1.反硬件断点 2.IAT加密 3.混淆,花指令 脱壳步骤:寻找OEP——dump到内存——修复IAT 1 寻找OEP 首先可以拖入 Exeinfo PE 查看链接器信息,没收获。。。

weixin_42636579的博客 6318

前端零代码丨UIOTOS + NodeRed:无代码搭建工控上位机的绝配组合!

用户类型价值硬件产品商软硬一体方案,无代码GUI上位机成新卖点软件服务商售前原型演示利器,交付成本降低至1/3平台开发商融合无代码技术,同质化竞争中脱颖而出🚀 总结UIOTOS的前端零代码设计(页面嵌套、属性继承、节点连线)与NodeRed的后端流程自动化,堪称工控与IoT开发的黄金组合。无论是串口通信、SCADA监控还是业务管理,均能实现“无代码交付”,真正让前端不求人,硬件交互触手可及!探索更多案例:UIOTOS官网在线体验。

2502_91192798的博客 757

ethercat linux lan9252 - lan9253调试

linux 的ethercat测试

linsheng_111的专栏 1934

C/C++ 导入表与IAT内存修正

本章教程中,使用的工具是上次制作的PE结构解析器,如果还不会使用请先看前一篇文章中对该工具的介绍,本章节内容主要复习导入表结构的基础知识点,并通过前面编写的一些小案例,实现对内存的转储与导入表的脱壳修复等。关于Dump内存原理,我们可以使用调试API启动调试事件,然后再程序的OEP位置写入CC断点让其暂停在OEP位置,此时程序已经在内存解码,同时也可以获取到程序的OEP位置,转储就是将程序原封不动的读取出来并放入临时空间中,然后对空间中的节表和OEP以及内存对齐进行修正,最后将此文件在内存保存出来即可。

微软技术分享 8599

AI翻译工具自动翻译日语视频生成srt中文字幕,支持离线轻松生成任意日语视频字幕!可选择支持显卡模式和cpu模式低显存也能用

【AI离线字幕神器:日语视频一键转中文字幕】推荐一款基于Faster-Whisper的本地化字幕工具,可离线生成日语视频的中文字幕(.srt格式),支持CPU/GPU加速处理。实测1小时视频最快4-5分钟完成翻译,无需联网保护隐私。操作简单只需拖拽文件,支持批量处理音频(mp3/wav)和视频(mp4/mkv)文件,还能自定义输出格式和参数调整。特别适合需要观看无字幕日语资料的用户,堪称技术宅必备神器。下载地址附后,包含详细使用教程和参数配置说明。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

浅谈壳的加载步骤及手动脱壳

浅谈壳的加载步骤及手动脱壳。 现在玩脱壳的人越来越多了,不知道是好事还是坏事。  现在玩手动脱壳一般三样工具足矣:loader,ImpREC,TRW2000。也许是这三剑客的功能太强大,因此手动脱壳也变得象流水化作业。大致以下几个步骤就搞定了。  1)loader找OEP.(OEP就是程序原来的入口点,即Original Entry Point)  2)TRW2000来Dump。也就是

人生代码,代码人生。。。 1964

STM32实战开发(110):基于STM32的智能地震监测系统开发

地震监测系统是自然灾害预警体系中至关重要的一部分。随着地震灾害的频发和对自然灾害预测精度要求的提高,智能地震监测系统逐渐成为研究的热点。STM32作为一款高性能的微控制器,凭借其强大的处理能力和丰富的外设接口,在地震监测领域中得到了广泛应用。本篇文章将详细介绍如何使用STM32实现一个智能地震监测系统的开发过程,涵盖硬件设计、软件编程、系统实现及相关代码。通过集成加速度传感器、地震数据采集、实时数据处理和无线数据传输功能,我们可以设计一个高效、稳定的智能地震监测系统。

2201_76125393的博客 710

uni-app 实现高德 / 百度 / 腾讯地图多端导航跳转(H5最全方案)

本文介绍了一套生产级可复用的多地图导航Hook封装方案。针对开发中常见的经纬度顺序混乱、中文乱码、参数不统一等问题,提供了统一解决方案。方案支持高德、百度、腾讯三大地图平台,封装了各平台的URI参数处理逻辑,包括坐标顺序转换、名称编码、导航模式适配等核心功能。通过组合式API设计,开发者只需调用统一入口即可实现多地图导航跳转,同时保留单独调用各平台的能力。文中还总结了6大常见坑点,并推荐默认使用高德地图作为最稳定的导航方案。该方案适用于车辆定位、物流配送等多种业务场景,可封装为可复用的Hooks组件。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 537

浅谈壳的加载步骤及手动脱壳(转载)

作者:不详 文章来源:不详 更新时间:2005-8-21 现在玩脱壳的人越来越多了,不知道是好事还是坏事。 现在玩手动脱壳一般三样工具足矣:loader,ImpREC,TRW2000。也许是这三剑客的功能太强大,因此手动脱壳也变得象流水化作业。大致以下几个步骤就搞定了。1)loader找OEP.(OEP就是程序原来的入口点,即Original Entry Poin...

weixin_30877493的博客 275

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

关于Dump与windbg调试

最近研究debug, 经常碰到DUMP,一直不明白什么意思,今天看了一下《浅谈脱壳中的Dump技术》,还是不太明白,看来需要好好研究一下。几个基本概念:DUMP, PE. windbg的基本用法。 推荐几个网站: dbgtech: 包含windbg的中文翻译帮助和基本知识。   看雪学院 和 看雪论坛 : 国内最好的加密解密论坛。哎,先到初学者论坛去看看吧,不懂的真多!   关于win...

Bobby的部落阁 581

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

浅谈脱壳中的附加数据问题(overlay)

Author:Lenus -------------------------------------------------- 1.前言 最近,在论坛上看到很多人在弄附加数据overlay的问题,加上上次答应了各位兄弟所以觉得写一些着方面的废话。如果下面的内容对你有帮助那是最好。 这篇文章我们将解决以下问题: 1.什么是overlay,怎么找到overlay? 2.为什么有些壳虽然有overla...

weixin_30733003的博客 183

2021-06-14

esp定律脱壳 ————————————纯属个人理解,如有不对求大佬指正。 看了好多关于esp定律脱壳的文章,都没看懂,o(≧口≦)o,可能是本人太笨了吧。所以就来浅谈一下自己对于esp脱壳的理解。 个人对于esp脱壳的理解是先把壳跑完,此时的oep就是真正的程序入口。然后再将源程序通过工具dump出来为一个exe文件,再进行一些修复操作,就脱壳完毕了。 接下来是实战操作 ┭┮﹏┭┮ ,我直接通过buuctf里的新年快乐题目来操作吧。 查壳 首先拖入ide中,我们会发现只有两个函数,是不是很可疑, 所以我

goat_2003的博客 195

脱壳经验(二)--如何优化

PE脱壳后,文件长度一般会增大,原因有以下几点:1、脱壳后,壳的尸体依然存在;2、脱壳后,重新建立了新的Import节、Reloc节等;3、有些加壳程序,将原程序的某些节跟外壳增加的某些节合并后,搬移到了其他位置。4、脱壳时候,因为采用的是dump内存,所以,在内存中对齐的PE镜象一般也会大于原始的PE文件,各个节的dump实际尺寸也会较原始PE文件的实际尺寸大。解决方案: (1) 脱壳后,...

weixin_30898109的博客 100

android壳,浅谈Android某数字壳“修复”

真正的脱壳修复是脱壳后修复被抽空的onCreate方法里的代码,而这样的话需要从so中解密并自行修复代码。目前通用常见的所谓的脱壳修复,原理很简单,就是利用MultiDex机制,将脱出来的dex用作dex2,更多的还有dex3..等等,然后塞进安装包,当软件运行时,系统会优先加载脱出来的dex2,dex3.. ,从而达到修改的目的。这样做,可以去除签名校验,可以修改代码(当然除了onCreate方...

weixin_39863371的博客 917

一些关于debug和性能分析方面的资料收集

很久没有发文章了,昨天因为要找分析java heapdump文件的资料无意中找到了不少window debug 的信息和dump原理的资料,所以在这里汇总一下。因为时间关系这里面的资料其实都没有去仔细看,仅看过了介绍和一部分内容就觉得不错然后就将其收集在这里,内容比较繁杂,至于是否合用就大家各取所需好了。 浅谈脱壳中的Dump技术 你会dump吗? 你还是只在OEP处dump吗...

weixin_30651273的博客 77

005 NsPack 1.4 之附加数据初探

文章目录查壳OD脱壳修复导入表处理附加数据关于附加数据NO.1NO.2NO.3 查壳 拿到样本之后先查壳 发现是NsPack 后面还有个Overlay 看到这个就要警惕了 说明PE程序尾部有附加数据 OD脱壳 载入OD之后在入口点发现了pushfd和pushad 于是采用最快的脱壳方法 使用Ctrl+S键 查找所有命令 查找对应的两条命令 在jmp的地方下断点 F7就能到达OEP 之后du...

鬼手的博客 657

HAI_使用手册 更新时间2019年6月19日16:59:46

如何赚钱?当然是要。 逆向学习 戳我有惊喜 这个是我整理的系列文章的导航,希望一起进步 开发学习 正在更新 练习 戳我有惊喜 这个是练习demo的整合,之后的更新也会在这里 工具 工欲善其事,必先利其器。 工具我暂时还没有整理。 看心情 辅助文档 看到大部分的图片链接失效,可能是因为自身原因。所以特与2018年2月25日11:47:00,开始整理成w...

王嘟嘟的博客 3388

软件破解常用汇编指令

软件破解常用汇编指令 cmp   a,b   // 比较a与bmov   a,b   // 把b值送给a值,使a=bret       // 返回主程序nop       // 无作用,英文(no operation)简写,意思“do nothing”(机器码90)          (ultraedit打开编辑exe文件看到90相当汇编语句的nop)call     // 调用子程序,子程序以r

jkqa_123的专栏 2582

渗透测试之浅谈APK数据包解密

解决渗透测试过程中的数据包解密

Machao629 1万+
上一篇: 代码比较乱 不过还是好用的 DLL注入
下一篇: 一个关闭屏幕和锁屏的代码 高手勿看
whypp
博客等级 码龄21年 58粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值