admin 发布:2024-05-28 21:40 129
今天给各位分享cskin源代码的知识,其中也会对cskin教程进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
第一步:往项目中添加MyButton.h 和MyButton.cpp
两个文件。
第二步:然后将自己需要的BitMap文件导入。
第三步:在项目工程的CARMDlg::OnInitDialog()中添加如下代码:
SetIcon(m_hIcon,
TRUE);
// Set big icon
SetIcon(m_hIcon,
FALSE);
// Set small icon
m_bkg.LoadBitmap(IDB_BMP_BKG);//系统的背景颜色
m_nCollectGoods.SetBitmap(IDB_BITMAP_BUTTON,BUTTON_STATE_UP);
m_nCollectGoods.SetBitmap(IDB_BITMAP_BUTTONB,BUTTON_STATE_DOWN);
m_nCollectGoods.HideText(FALSE);
m_nCollectGoods.FontStyle(L"MS Sans Serif", 14,
8, TRUE, FALSE);
m_nCollectGoods.SetTextColor(RGB(255,0,0));
第四步:在CARMDlg::OnPaint()中添加如下代码,实现对窗口的重绘:
//CDialog::OnPaint();
CPaintDC dc(this);
CBrush brush;
brush.CreatePatternBrush(m_bkg);
CBrush *pOld =
dc.SelectObject(brush);
CRect rc;
GetClientRect(rc);
dc.FillRect(rc,brush);
dc.SelectObject(pOld);
pOld-DeleteObject();
brush.DeleteObject();
gh0st远控软件采用驱动级RESSDT过主动,svchost参数启动,替换系统服务的方式工作的,工作方式较为先进,美中不足的部分是没有进行驱动级或用户级隐藏,当然这部分可以添加进去。编码利用了VC的编程环境。
一、环境配置
编译环境一定要配置好:DDK+SDK+VC6,DDK用来编译sys文件的,SDK+VC6是用来编译工程的,配置部分比较简单,网上有很多资料,这里不再详述,有兴趣的朋友也可以查看DDK和SDK的相关帮助。
二、特征码定位简述
杀毒软件查杀木马的原理基本是根据特征查杀的,被查杀的部分我们称之为特征码,所以我们可以利用特征码定位工具MyCLL定位出病毒的特征码位置,定位工具原理是将被扫描木马分块,利用分段填充的方式,匹配杀软的特征值,找到杀软查杀病毒的位置。
定位出特征码,如何反向找到源码中的对应位置呢?请看下面分析,
三、二进制文件与源码定位之map文件利用
map文件是二进制和源码之间对应的一个映射文件。
我们假设根据第三步我们定位出了病毒的特征码:
病毒名称 特征码位置 内存地址
svchost.dll 000038AA_00000002 100044AA
svchost.dll 00005F98_00000002
第一步设置VC编译环境生成Map文件。
在 VC 中,点击菜单“Project - Settings”选项页(或按下 Alt+F7),选择 C/C++ 选项卡,并在最下面的 Project Options 里面输入:/Zd ,然后要点击 Link 选项卡,选中“Generate mapfile”复选框,并在最下面的 Project Options 里面输入:/mapinfo:lines,表示生成 MAP 文件时,加入行信息。设置完成。
第二步编译VC工程,设置活动工程编译即可,这个不用说明。这个步骤完成后,在release(或debug)目录,多了一个.map文件(比如svchost.map)。
第三步打开map文件(用UE或文本编辑器打开都行),形式如下:
(begin)
Timestamp is 488fcef2 (Wed Jul 30 10:16:18 2008)
Preferred load address is 10000000
---------------------------------------------------------------------------1----(为方便说明,wrw添加)
Start Length Name Class
0001:00000000 00010a50H .text CODE
0001:00010a50 00000485H .text$x CODE
0002:00000000 000004c8H .idata$5 DATA
......
0003:00000010 00000004H .CRT$XIZ DATA
0003:00000020 00001a50H .data DATA
0003:00001a70 00000688H .bss DATA
0004:00000000 000000a8H .rsrc$01 DATA
0004:000000b0 00000cf0H .rsrc$02 DATA
----------------------------------------------------------------------------2---(为方便说明,wrw添加)
Address Publics by Value Rva+Base Lib:Object
0001:00000000 ??0CAudio@@QAE@XZ 10001000 f Audio.obj
0001:000000d0 ??_GCAudio@@UAEPAXI@Z 100010d0 f i Audio.obj
0001:000000d0 ??_ECAudio@@UAEPAXI@Z 100010d0 f i Audio.obj
0001:000000f0 ??1CAudio@@UAE@XZ 100010f0 f Audio.obj
0001:000001e0 ?getRecordBuffer@CAudio@@QAEPAEPAK@Z 100011e0 f Audio.obj
0001:00000240 ?playBuffer@CAudio@@QAE_NPAEK@Z 10001240 f Audio.obj
0001:000002c0 ?InitializeWaveIn@CAudio@@AAE_NXZ 100012c0 f Audio.obj
......
0001:00003310 ?SendToken@CFileManager@@AAEHE@Z 10004310 f FileManager.obj
0001:00003320 ?UploadToRemote@CFileManager@@AAE_NPAE@Z 10004320 f FileManager.obj
0001:00003440 ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj
0001:00003670 ?StopTransfer@CFileManager@@AAEXXZ 10004670 f FileManager.obj
0001:00003730 ?CreateLocalRecvFile@CFileManager@@AAEXPAE@Z 10004730 f FileManager.obj
......
----------------------------------------------------------------------------3---(为方便说明,wrw添加)
Line numbers for .\Release\FileManager.obj(E:\vtmp\gh0st3src\Server\svchost\common\FileManager.cpp) segment .text
17 0001:00002630 20 0001:0000267f 21 0001:00002698 24 0001:000026d0
25 0001:000026f8 26 0001:0000273c 29 0001:000027d0 33 0001:000027ee
77 0001:000027f8 36 0001:000027fb 37 0001:00002803 77 0001:0000280d
......
532 0001:0000340f 534 0001:00003414 537 0001:00003428 540 0001:00003440
546 0001:0000345d 547 0001:00003487 548 0001:00003490 549 0001:00003492
551 0001:0000349e 552 0001:000034b8 553 0001:000034cb 554 0001:000034d4
558 0001:000034de 560 0001:000034e9 563 0001:000034ee 564 0001:00003506
......
(end)
我们看下,定位svchost.dll 的第一个特征码内存地址为:100044AA,在第2块中,我们可以找到RVA+BASE与之很接近的是
0001:00003440 ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj
这样我们可以定位到FileManager.cpp中的FixedUploadList函数,是不是范围缩小了?
下面我们再缩小代码行
利用这个公式:特征码行偏移 = 特征码地址(Crash Address)- 基地址(ImageBase Address)- 0x1000
看起来好像很难,其实很简单,我们将100044AA去掉内存基址10000000,再减1000,因为PE很多从1000开始,可以得到代码偏移地址为34AA。到第3块中找对应的代码行。
偏移地址34AA在(551 0001:0000349e 552 0001:000034b8 )中间,也就是551行和552行中间,我们到源程序中查找第551行:
wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash);
这样就定位出源代码了,要怎么修改就怎么修改它就可以了。
四、实战免杀
A、卡巴免杀
首次编译后,先做卡巴的免杀。卡巴杀sys文件和dll,当然也就杀包装它们的install.exe,最后卡巴还杀生成的sever,我这里说杀生成好的server不是和前面的特征码重叠的地方,而是杀配置信息。
第一步、sys免杀
sys重新编译后,增加了输入表的函数,同时系统不同,造成很多地方不同于原特征,顺利通过卡巴、金山、小红伞等杀软。
第二步、svchost.dll免杀
特征码定位MultiByteToWideChar和"gh0st update"两个位置。这里是通过第3步map文件得出的。
卡巴怕加花指令, 这个函数MultiByteToWideChar的调用上,可以在这个函数前面随便加几句无效语句就可以通过卡巴杀软。
字符串调用"gh0st update" ,这个是用于更新用的 ,如果不要在线更新,直接把这个语句所在代码块删除;嘿嘿,其实搜索工程替换这个字符串为其他的字符串就可以了^_^,这个方法同时可以过金山杀软。
第三步、server免杀
卡巴定位在最后的配置信息,采取跳转显然是不行的,采用加花的办法,在写入AAAAAA配置信息之前,随便写些东西,就可以做server免杀。
卡巴免杀完成!
B、Avast免杀
最新的avast杀软再查杀1下,杀install.exe和svchost.dll(也就是杀生成的文件和其中的资源文件),接着做它的源码免杀。
定位在特征字符串%02d/%02d/%02d和“SYSTEM\CurrentControlSet\Services\%s”两个地方。
解决方案:
1、svchost.dll的特征码定位在键盘记录KeyboardManager.cpp文件中的SaveInfo(char *lpBuffer)函数。特征字符串%02d/%02d/%02d,也就是我们看到键盘记录的日期,修改之,修改的方法很多,将其改为[%d/%d/%d %d:%d:%d] ,编译即可通过avast杀软。
2、install的特征码定位在“SYSTEM\CurrentControlSet\Services\%s”,对应文件是install.cpp里的InstallService函数,修改大小写,编译即可通过免杀。
五、添加垃圾代码的小方法
垃圾代码要移动特征码所在的位置,不要跑到堆栈中了,这样的代码没有用。可以采取添加for循环,做计数,简单统计,采用局部变量,不改变后面的逻辑为宜。
添加输出表的方法:
有杀输出表的,可以在生成的svchost.dll上添加空函数 ,但是每次编译都要修改1次资源 ,其实我们在源码上添加如下语句:
extern "C" __declspec(dllexport) bool JustTempFun();//声明
……
extern "C" __declspec(dllexport) bool JustTempFun() //实现
{
return false;
}
编译后,输出表就被改变了,有的杀软就可做到代码免杀。
六、gh0st自动生成6to4ex.dll的修改
看到好多站友提问自动生成6to4ex.dll的问题,有热心站友也提出了自己的见解 ,我感觉有些人提出的解决方案不完全正确,有可能造成刚入手人误解,我根据自己的理解说明1下。
gh0st服务端是通svchost -netsvcs启动的,所以程序要利用netsvcs 服务,服务端也就是根据netsvcs生成的,故不能说服务端生成是随机的,相对于大多数系统来讲,基本是固定的,下面看分析。
查看install.cpp里面的InstallService()方法,首先遍历HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows NT\CurrentVersion\Svchost中的服务项,查找到一个服务后,程序采取替换服务的方法,将原服务删除,然后生成对应服务项+ ex.dll的文件替换原服务,6to4服务一般排在第一位,6to4服务是一种自动构造隧道的方式,作用在于只需要一个全球惟一的IPv4地址便可使得整个站点获得IPv6 的连接,这个服务对一般人来讲,基本闲置,所以我们的程序就把6to4服务给替换掉,同时在windows\system32\目录下生成 6to4ex.dll,以后启动就是6to4ex了,如果把这个服务跳过去,就依次向下生成Ias、Iprip等服务啦,如果netsvcs项没有可以替换的服务,则程序将自己添加1个服务,名称就是由 AddsvchostService()方法产生的netsvcs_0x%d。
这样说不知道关心服务名称的明白了不?
这个不能说是技术问题,但是小技巧问题可以从这里产生,我不知道其他人的360是怎么过的,但是我觉得可以提示1下的是,如果是360默认系统安全的服务,它肯定不会报不安全,替换闲置的系统安全的服务则通过360的效果要好的多
本文来自: 华夏黑客同盟论坛 本文详细地址:
Delphi界面控件 VCLSkin 使用
安装* 最好安装前把文件放到Lib文件夹下: 1.把下载的文件解压后放到Delphi目录的Lib文件夹下 2.启动DelphiOpen找到刚才放的*.dpk和*.pas选中 3.点Install,Compile,Delphi最右边会出现个VCL Skin页,里面会有SkinData和SkinStore
最简单的实现如下: 1 新建工程,在 Form1上放置Skindata 控件。 2 设置 Skindata的skinstore 属性 ,找到随VCLSkin文件一起下载的*.skn皮肤文件。 3 设置 Skindata的active 为 true 4 编译运行你的程序。
这是最简单的实现,当然也可以添加SkinStore来做更多的选择,可以由用户自己选择皮肤文件, VCLSkin26自带的Demo/Demos下有例程截图如下 (高级应用就不说了,需要的朋友可以Google或者看Demo)
***************************************************************************************** 1. VCLSkin综述 VCLSkin 是一个能让Delphi程序变得非常漂亮的控件包. 它允许允许软件开发人员不用修改程序代码便把软件界面变得非常漂亮。它的美化支持窗体和控件和菜单。VCLSkin同时也提供了大量高质量的skin(皮肤)让你应用于你的程序。 2. VCLSkin特点 VCLSkin 是一个用于让用户的程序界面更加漂亮的扩展控件。 它允许软件开发人员不用修改源代码就能让他们的程序界面更加漂亮。一个标准的程序界面能在窗体放入VCLSkin控件后变得非常漂亮,而这公公需要几分钟的时间。 VCLSkin 能做些什么 ? 不像其它控件那样,你需要修改源代码才能构建一个漂亮的界面, VCLskin 能让Delphi的标准控件在一下子就变得非常漂亮,而这一切都不用修改源代码。 VCLSkin 支持以下的窗体:
* Delphi Form * MDIform . (normal,Maximized, MInimized) * Common Windows dialogs (Open/Save,Font,Print,Color). * MsgBox. * Exception MsgBox.
VCLSkin 支持的标准控件:
* The title bar of TForm * The title bar buttons * The borders of Tform * Tbutton,TBitbtn. * Tradiobutton and Tcheckbox * Tmainmenu and Tpopupmenu * Toolbar buttons * TTabcontrol and TPageControl * T Progressbar * TStatusbar * TCustomCombox,Tcombobox, TDbCombobox * TPanel and TGroupbox * TMemo, TListBox,TListView,TTreeview * TRadioGroup , TDBRadioGroup. * TCustomGrid,TStringgrid,TDrawgrid,Tdbgrid. * Third party component, Enlib, AdvGrid .. 同时也支持大量的第三方控件。
3.安装 你可以像安装其它控件一样安装这夽控件,其实就这几步:
1. 解压缩 Vclskin2.zip 到任意目录 2. 在 Delphi IDE 环境中选择菜单 "File. Open...", 然后找到连接库 vclskindX.dpk, 按着点击Compile按钮。 3. 在 Environment 添加VCLSkin控件所在的路径。 *****************************************************************************************
1. TSkinData TSkinData 主要用于美化你的程序, 只要把TSkinData控件放下去,它就能自动美化所有窗体。 属性 Active: 使用或取消对程序的美化。 DisableTag: 取消对某个特定的组件的美化; 把组件的Tag属性设为99就行了。 (control.tag mod 100=disabletag) SkinControls: 指定哪类组件能被美化. SkinFile: skin(皮肤)文件的包含路径的文件名,在运行时加载。 SkinStore: 在设计模式时储备的skin文件. SkinFormType: 能使用多种美化方式. 方法 LoadFromStream(Stream: TStream); LoadFromFile(value:string); LoadFromCollection(astore:TSkinStore;aindex:integer); 在运行时装载skin文件. UpdateSkinControl(fParent:Tform); UpdateMenu(fParent:Tform); 在运行时组件创建时进行美化。 事件 OnFormSkin(Sender:TObject;aName:string;Var DoSkin:boolean); OnFormSkin 事件的发生先于美化窗体, 如果 Doskin 为 true, Vclskin 就会美化这个窗体, 如果为false,Vclskin 就会跳过这个窗体. aName 是窗体的类名. OnSkinChangned(Sender:TObject); OnSkinChanged 发生在skin文件改变之后。
2. TSkinStore TSkinStore 能让你在设计模式时储存多个skin文件。 TSkinData 能在运行时从 TSkinStore 装载skin文件: TSkinData.LoadFromCollection(astore:TSkinStore;aindex:integer),
3. 怎么美化程序界面 你可以在几分钟内构建一个漂亮的程序. 1 把 TSkindata 控件放在主窗体上。 2 设置 Skindata.skinstore 属性 , 把skin文件储存在你的程序中。 3 设置 Skindata.active = true 4 编译运行你的程序。
4. VCLSkin FAQ 1 如果我的工程中有14个窗体,用不用每个窗体都放一个skin控件? 不用,你只需要放置一个Tskindata在你的主窗体,Vclskin就能自动美化每个窗体。 2 怎样美化一个内嵌的窗体 ? Vclskin 不能自动美化内嵌窗体,你要手动控制它。压缩包中有一个"NestedForm"的例子,讲的是在运行状态美化内嵌窗体、框架的。 3 怎样美化动态控件 ? 你需要手动控制它。代码如下: control:=Tmycontrol.create(form1); skindata1.UpdateSkincontrol(form1); // add this line to skin dynamic control. 4 怎样美化依靠窗体 ? Vclskin 支持停靠窗体. 例程代码如下: procedure TDockableForm.FormShow(Sender: TObject); begin
if MainForm.skindata1.active then MainForm.skindata1.skinform(handle);
end;
5 怎么美化动态的右键菜单 ? 例程代码如下: popup:=Tpopupmenu.create(form1); ..... add menuite skindata1.UpdateMenu(form1); //add this line popup.popup(x,y);
6 怎样美化动态窗体 ? Vclskin 可以美化动态窗体 , 但不能自动美化内嵌窗体. 点击这儿查看如何美化内嵌窗体.
7 找不到文件 'c:\program files\borland\delphi7\SM\winskindata.pas' Delphi7 试用版与Delphi7正式版的Dcu文件格式是不一样的。 如果你使用的是正式版,你可以安装一个演示包。vclskin2.zip. 如果你使用的是试用版,你可以安装一个演示包。 D7trial.zip.
8 使用 FastReport 时,出现了“无效操作,控件没有父窗体的的错误提示 ? 设置 TSkindata.skincontrols.xcFastReport = true 就可以解决这个问题。
9 使用 ReportBuilder 出现了“无效操作,控件没有父窗体的错误提示? 你可以在 TSkindata.OnformSkin 事件中取消美化这个控件。 代码如下 : procedure Tform1.SkinData1FormSkin(Sender: TObject; aName: String; var DoSkin: Boolean); begin
//'TppPrintPreview' 就是要取消美化的窗体名称。 if aName='TppPrintPreview' then doskin:=false;
end;
10 如何存取skin文件的颜色? 你可以借助 Tskindata.colors[] 属性来存取颜色。 比如说 , 窗体的背景色是 : skindata.Colors[csButtonFace]. TShemeColor=(csText,csTitleTextActive,csTitleTextNoActive, csButtonFace,csButtonText, csButtonHilight,csButtonlight,csButtonShadow,csButtonDkshadow, csSelectText,csSelectBg,csHilightText,csHilight, csMenuBar,csMenuBarText,csMenuText,csMenubg, csScrollbar,csTextDisable); TShemeColors=array[csText..csTextDisable] of Tcolor; Skindata.Colors: TShemeColors;
11 用户能自定义那些可视化控件的外观吗? 你可以使用 skin builder自定义细节.
12 怎样取消美化某个窗体或控件? 设置 form.tag=99 取消 美化这个窗体。
13 如何在美化一个工程的窗体标题栏和菜单的风格? 设置 TSkindata.skincontrols.xcMainmenu = false
关于cskin源代码和cskin教程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;