存档

‘Computer’ 分类的存档

BCB实现更改外部exe图标(图标来源ICO文件,支持多图片ico)

2009年5月29日 3 条评论

这是很久之前玩杂志打包工具时的副产物,这个是比较原始的一个版本,改进的版本可以支持从exe等文件中提取图标。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <classes.hpp>
#pragma   pack(push,1)
typedef struct ICONDIRENTRY
{
    BYTE bWidth;
    BYTE bHeight;
    BYTE bColorCount;
    BYTE bReserved;
    WORD wPlanes;
    WORD wBitCount;
    DWORD dwBytesInRes;
    DWORD dwImageOffset;
}ICONDIRENTRY;
 
typedef struct ICONDIR
{
    WORD idReserved;
    WORD idType;
    WORD idCount;
}ICONDIR;
typedef struct GRPICONDIRENTRY
{
    BYTE bWidth;
    BYTE bHeight;
    BYTE bColorCount;
    BYTE bReserved;
    WORD wPlanes;
    WORD wBitCount;
    DWORD dwBytesInRes;
    WORD nID;
}GRPICONDIRENTRY ;
 
typedef struct GRPICONDIR
{
    WORD idReserved;
    WORD idType;
    WORD idCount;
    GRPICONDIRENTRY idEntries[];
}GRPICONDIR ,*lGRPICONDIR;
 
#pragma   pack(pop)
AnsiString icongroupname;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "modifyico.h"
bool CALLBACK EnumIconProc(HMODULE hModule,LPCTSTR lpszType,LPTSTR lpszName,LONG lParam)
{
    icongroupname=lpszName;
}
 
 
bool __fastcall changefileicon(AnsiString filename,AnsiString iconfile){
    HMODULE hexe=LoadLibrary(filename.c_str());
    if(NULL==hexe)return false;
    EnumResourceNames(hexe,RT_GROUP_ICON,(ENUMRESNAMEPROC)EnumIconProc,0);
    FreeLibrary(hexe);
    ICONDIR stID;
    ICONDIRENTRY stIDE;
    GRPICONDIR stGID;
    HANDLE hFile;
    DWORD  nGSize, dwReserved;
    HANDLE hUpdate;
    BOOL ret;
    hFile = CreateFile(iconfile.c_str(), GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
    {
       return false;
    }
    ZeroMemory(&stID, sizeof(ICONDIR));
    ret = ReadFile(hFile, &stID, sizeof(ICONDIR), &dwReserved, NULL);
    TList *list=new TList();
    TStringList *sizelist=new TStringList();
    int i=0;
    nGSize= stID.idCount*sizeof(GRPICONDIRENTRY)+6;
    BYTE *GIcondata=new BYTE[nGSize];
    ZeroMemory(GIcondata,nGSize);
    int offset=0;
    *((WORD*)(GIcondata+offset))=0;
    offset+=2;
    *((WORD *)(GIcondata+offset))=1;
    offset+=2;
    *((WORD *)(GIcondata+offset))=stID.idCount;
    offset+=2;
    for (i = 0; i < stID.idCount; i++) {
        ZeroMemory(&stIDE, sizeof(ICONDIRENTRY));
        SetFilePointer(hFile,i*sizeof(ICONDIRENTRY)+sizeof(ICONDIR),NULL,FILE_BEGIN);
        ret = ReadFile(hFile, &stIDE,sizeof(ICONDIRENTRY), &dwReserved, NULL);
        CopyMemory(GIcondata+offset,&stIDE,12);
        *((WORD*)(GIcondata+offset+12))=0x1000+i;
        SetFilePointer(hFile, stIDE.dwImageOffset, NULL, FILE_BEGIN);
        BYTE *icondata=new BYTE[stIDE.dwBytesInRes];
        ret=ReadFile(hFile,(LPVOID)icondata, stIDE.dwBytesInRes, &dwReserved, NULL);
        if(!ret)
        {
            CloseHandle(hFile);
            list->Free();
            delete [] icondata;
            delete []GIcondata;
            sizelist->Free();
            return false;
        }
        list->Add(icondata);
        sizelist->Add(IntToStr(stIDE.dwBytesInRes));
        offset+=sizeof(GRPICONDIRENTRY);
    }
    hUpdate = BeginUpdateResource(filename.c_str(), false);
    ret = UpdateResource(hUpdate, RT_GROUP_ICON, icongroupname.c_str(), GetSystemDefaultLangID(), (LPVOID)GIcondata, nGSize);
    i=0;
    for (i = 0; i < stID.idCount; i++) {
            ret = UpdateResource(hUpdate, RT_ICON, MakeIntResource(0x1000+i), GetSystemDefaultLangID(), (LPVOID)list->Items[i], StrToInt(sizelist->Strings[i].c_str()));
    }
    EndUpdateResource(hUpdate, false);
    if (!ret)
    {
       CloseHandle(hFile);
       list->Free();
       sizelist->Free();
       delete []GIcondata;
       return false;
    }
    CloseHandle(hFile);
    list->Free();
    sizelist->Free();
    delete []GIcondata;
    return true;
}
分类: Computer 标签: , ,

FLASH吸血鬼的工作原理及Anti-vampire的几种思路

2009年5月29日 没有评论

继续补全之前blog的博文~~
FLASH吸血鬼是众多网友用来从exe可执行文件中提取swf的利器,其直接读取内存,从内存中取出swf文件。
经过分析,发现其原理还是比较简单的。

第一步。通过GetWindowThreadProcessId函数获得进程PID。为以后基本的进程内存搜索奠定基础。
第二步。通过OpenProcess打开前面获得的pid的进程对象。
第三步。通过VirtualQueryEx函数和ReadProcessMemory函数遍历进程的内存,在内存中搜索swf文件的文件头“CWS”和“FWS”。如果搜索到,则进行解密,并输出swf文件。

Anti-vampire的启示:
1、阻止吸血鬼得到窗口句柄
2、阻止吸血鬼打开程序内存
3、使swf文件不完整的存在于程序内存中
其中第一种实现后用起来很怪异,第二种强度凑合,但是如果吸血鬼采取一定的跟进措施,很容易搞定,第三种就目前来说,算是比较有效的。

分类: Computer 标签: , ,

搬家完毕~子目录绑定

2009年5月28日 2 条评论

继续折腾,换了个linux主机,感觉好多了,无论是伪静态还是php组件支持,以及子目录绑定等等。先用着试试~

分类: Computer 标签: ,

UAE 6 pre-release 2 game[stop]

2009年5月18日 47 条评论

【09.06.15更新】
收到官方email知会,uae,asv停止更新,请不要再询问下载信息~

RT,only a game
game是有规则的,此game规则如下:
1、这里提供Url action editor 6 pre-release 2原版文件。
2、提供由购买者给出的用户名和邮箱算出来的注册文件。
3、获得此版本软件和注册文件者严谨私自对外提供,或转某些不受本人欢迎的论坛,如520du。
4、需要此版本软件者,留言回复本文,留下需要的用户名及邮箱,之后会email到此邮箱。
5、来自520du者请勿回复本文,回复后也是没结果的,不用浪费彼此时间。
6、无售后服务。本game仅用于研究,请勿用于商业用途,使用软件造成一切后果自负。
7、部分本人不愿与之合作的id,本人有权选择不发送email,SO,如果长时间没收到email,也不用再次找我了。
8、一旦发现有违规则的事出现,例如私自对外提供等,本人无条件终止game。
9、本人不会每时每刻在线,但会保证每天最起码上线一次,解决之前的回复。

另:最后欢迎asv,uae,asr的正版用户免费提供原版文件(不带有注册信息)供偶分析,以搞出新的game,以飨网友~~~,此过程不会泄露正版用户的任何注册信息,不会影响其正常升级。

pic

分类: Computer 标签: , , ,

URL Action Editor keygen成功~

2009年5月13日 5 条评论

RT,继解决action script viewer后又解决的一个buraksd的产品,不过可惜的是,这个并不是最新版本,而是6.0 pre-release2.不过keygen倒是兼容之后的版本的,如果buraksd不做啥变化的话:wink:
1

2
3

分类: Computer 标签: , , , , ,

【原创】action script viewer 6猥琐注册算法分析【简要注册机源码】

2009年5月9日 12 条评论

本来此篇文章也在旧blog上发表,现在重新折腾。

【破文标题】action script viewer 6注册算法分析【简要注册机源码】

【破文作者】coolspace

【破解工具】PEiD,IDA,Filemon

【破解平台】Windows XP sp3

【软件名称】action script viewer 6 pre-release5

【原版下载】放狗

【保护方式】keyfile

【软件简介】Action s cript Viewer (ASV)是款SWF (Flash)反编译的(decompiler 是翻译机器语言或有时目标代码的计算机程序(产品从编译器) 成一种高级语言(原始代码) 。由比较, 反汇编程序翻译机器语言成汇编语言。)win32应用程序.能让你查看SWF文件里面的动作脚本;能让你抽取位图、音频、视频、字体等原始文件;能让你浏览SWF文件的内部架构;能帮你重建SWF的FLA文件,导出SWF的原始资源文件和一个JSFL命令。

【破解声明】以前偷偷的弄个几个软件,但是这倒是第一次写破文,问题多多,看官见谅。软件注册校验地方太多,破文没贴全。看keygen代码领会精神即可

【破解内容】

偶然机会,放狗搜到最新版的asv主程序,马上下载,然后运行。结果无界面:funk: :funk: 。初步估计是原来的注册失效了(这个软件的注册一般不能跨大版本使用)。:lol

根据以前版本的使用经验,没发现有输入注册码的地方,并从官网得知,应该为keyfile型注册

这是个很好的工具,如是决定灭之(最开始也没想到软件的注册这么猥琐)。

一、定位keyfile文件名

开启神器Filemon,运行asv主程序,发现载入了一个名为asv5.pke的文件。初步断定,keyfile就是这个。另外还载入了一个ASV5U.DLL。这个文件peid查为delphi dll文件,估计从其中调用了部分导出函数,之后再说。

这里插一句,最开始忘记上官网看了,之后灭完后上官网一看,连注册文件的文件名都已经告诉用户了,这步可以省略:funk:

二、查壳,脱壳

peid查主程序为upx压缩壳,脱之,脱壳后显示为delphi程序。过程省去不表。

阅读全文…

分类: Computer 标签: , ,

[转]Delphi的内部字符串处理函数/过程不完全列表

2009年5月9日 没有评论

本来这贴在旧blog上已经备份过的,不过由于那个blog所在的服务器归期无望,我还是从新备份一份吧。

  在破解用Delphi写的软件时,经常会碰到一些诸如System.@LStrCmp、System.@LStrAddRef之类的函数。实际上它们都是Delphi内部用来处理字符串的过程/函数。这些函数在System里都可以找到。但是它们的参数和返回值有点特别。于是抽空看了一下system.pas。

  首先,这些函数名都有一定的格式:

_xStryyy

  其中x可以是字符P、L、W。P代表该函数是处理传统Pascal字符串的,L代表该函数是处理长字符串的,W当然就是Unicode了。yyy就是表示函数的实际作用了。比如_PStrCat就是表示传统Pascal字符串的连接函数。大家可以查阅system.pas来验证一下。不过一般不大见到W开头的函数。

  下面是经过整理的结果,算是为大家提供一个方便。说明一下,列表不全,但没列出来的函数完全可以见名知意。当然,前提是你看完列表。

  另外,需要注意的是,对于在堆栈里的返回值,一般以EBP引用。如果你看到函数调用后下一条语句是MOV xxx,[EBP+yy],那通常就是保存返回值了。特别是_LStrCopy。 阅读全文…

分类: Computer 标签: , ,

软件推荐——Periodic Table

2009年5月7日 没有评论

搞化学,化工,材料等的,免不了要常和各种各样的元素打交道,这时,能够准确,快速的查到各个元素的相关信息就十分的重要,这里推荐一款不错的软件,能够很好的解决这个问题。
Periodic Table是一款元素周期表软件,它在普通元素周期表的基础上,为每种元素都配备了图片,同时提供了足够的信息以供查询。下面提供几张截图,以飨读者。
下载可去这里:去下载勒
periodic1 阅读全文…

分类: Computer, Study 标签: ,