首页
社区
课程
招聘
[旧帖] [求助]如何从PE文件中提取出.ICO文件? 0.00雪花
2010-10-12 00:38 4057

[旧帖] [求助]如何从PE文件中提取出.ICO文件? 0.00雪花

2010-10-12 00:38
4057
我已经依据PE格式查找到 RT_GROUP_ICON 资源类型的第一个资源图标 的 IMAGE_RESOURCE_DATA_ENTRY结构

将其中的 OffsetToData 转换为内存指针后作为 lpResIcon 即资源图标数据指针,
又用 Size1 作为资源大小 dwSize,然后 WriteFile,hFile,lpResIcon,dwSize,addr dwWritten,0

可是得到的文件 不是我的 图标 ---  

问: 为什么会这样,是EXE中的图标存储的数据格式与ICO中不同吗??

  那么主流的图标提取软件是用了什么原理呢???
  应该如何解决?

另:RT_GROUP_ICON 与 RT_ICON 有何区别?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 7
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mengyihong 2010-10-12 03:01
2
0
为了大家都下到 另起一贴上传工具 LZ记得看
雪    币: 38
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
风萧兮 1 2010-10-12 03:28
3
0
先谢过楼上---可是 我主要想 编程实现 ----

请教一下算法 ---

(我使用 32 ASM)
雪    币: 7
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mengyihong 2010-10-12 03:31
4
0
哦 那个我就不知道啦  现在我就研究的爆破 ...
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
freeks 2010-10-12 12:28
5
0
怎么没人来答呢?

给个提示也可以啊 -------

是太简单了 ???

我也很想知道----
雪    币: 317
活跃值: (13)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
RAsmDbg 1 2010-10-12 16:33
6
0
如果你确定你找到的数据没错的话
那么,你在这段数据前面加上ico的头数据就行了,大概有20个字节左右,你找个ico比对一下就知道了
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
superchair 2010-10-16 22:53
7
0
原来从网上扒来的,亲测,可用。
delphi的
可以自己试试改C

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    edt1: TEdit;
    dlgOpen1: TOpenDialog;
    dlgSave1: TSaveDialog;
    btn1: TButton;
    pnl1: TPanel;
    img1: TImage;
    procedure getIcon;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.getIcon;
var
  Count : Integer;
  FileName : String;
  i:integer;
begin
  if( FileName <> edt1.Text ) then
  begin
    FileName:=Edt1.Text;
    I := 0;
    Count := ExtractIcon( Application.Handle, PChar(FileName),
    $FFFFFFFF );
  end
  else
    Inc(I);
  if( I < Count ) then
    img1.Picture.Icon.Handle :=
    ExtractIcon( Application.Handle, PChar(FileName), I )
  else
    ShowMessage('你要获取至少要选择个文件吧!要.exe才行哦!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  getIcon;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  dlgOpen1.Execute;
  edt1.Text:=dlgOpen1.FileName;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  dlgsave1.Execute;
  img1.Picture.SaveToFile(dlgsave1.FileName+'.ico');
end;

end.
雪    币: 38
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
风萧兮 1 2010-11-18 23:53
8
0
自己接这个帖子吧 --- 一切 都应该 归结于 ICO 的文件格式-- MSDN 搜索 ICONS 有篇讲 格式 的经典文章

RT_GROUP_ICON 最后找到的数据 相当于 ICO 的文件头

RT_ICON 找到的是 图标的其余数据

两个结合 WriteFile 就可以提取图标了
雪    币: 857
活跃值: (294)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
Vsbat 4 2021-9-18 16:58
9
0
excellent !
游客
登录 | 注册 方可回帖
返回