心电图 偷拍 [原创]Delphi之萝莉调教篇-编程技巧-看雪-安全社区|安全招聘|kanxue.com
本文老到技巧调换.要是诸位看官念念与小生沿途探讨萝莉的问题的话...PM我吧
对于Delphi的萝莉调教技巧,很久往常就有大牛作念过了...其实技巧早掌合手了
只是认为太败兴~预想专家也齐会于是就莫得写~既然群里有东说念主建议~就留住一份记载
往常我很傻很生动.主要原因是也因为很懒.
正好新春之际全当写出来给诸位献礼了.给专家拜个晚年
由于本文作家水平问题,有说的别离大概不解确的地点请专家宽恕.菜鸟之作高东说念主跳过...
Q:为啥不消Delphi?
A:体积太大
Q:为啥用Delphi?
A:很浮浅
体积问题一直齐是Delphi Programer头痛的问题...
我也幻念念过有一天用Delphi像VC相似的写出迷你小门径...
直到某一天我发现许多萝莉控齐在调教萝莉...于是我突发奇念念我也来调教一个萝莉吧
沟通Delphi~御姐变萝莉...
对于这篇著述沟通分为两个部分刻画...
1.萝莉自身的调教(对于中枢库的修改.导入表的迷你化)
2.外界的调教力量(Delphi编译...MASM link)
运行说说如何调教Delphi(萝莉)吧...
0.VCL的力量
1.KOL的力量
2.自修改中枢库
3.导入表的优化
4.进一步优化
[0].VCL的力量...
对于VCL未几说了...其竟然迷你化门径中
VCL基本上齐不会使用.
这里我说的VCL不是说窗体VCL...举例SysUtils,Classes等单位也齐是属于VCL部分
system,sysinit亦然属于吧?我也不太了了,这两个单位是Delphi默许加载的...
念念取消不编译到工程中...不在本章盘考范围中
给诸位的建议是...除了system,sysinit之外的Delphi自带VCL单位齐不要使用...
system中其实仍是有许多函数了...
由于这两个单位是默许的是以念念不消也没倡导...
program Project1; uses Windows; begin MessageBox(0, 'Hello World!', 'By Anskya', 0); end.写下以下代码,编译后...15k For Delphi7(Delphi 6 这份代码编译出是8k) 为什么这样大?和VC相似的原因,系统默许库,编译器底层干了许多不为东说念主所知的事情 望望导入表... 看到莫得?除了user32和kernel32,还有advapi32??照旧操作注册表函数. 咱们并莫得操作注册表呀? IDA逆向分析一下发现是读取
unknown_libname_13 proc near cbData= dword ptr -0Ch Data= byte ptr -8 hKey= dword ptr -4 push ebp mov ebp, esp add esp, 0FFFFFFF4h movzx eax, ds:word_40400C mov dword ptr [ebp+Data], eax lea eax, [ebp+hKey] push eax ; phkResult push 1 ; samDesired push 0 ; ulOptions push offset SubKey ; "SOFTWARE\\Borland\\Delphi\\RTL" push 80000002h ; hKey call RegOpenKeyExA test eax, eax jnz short loc_402A84 . . .好了这个等于专家通俗所编译的Delphi最小化门径... [1]KOL的力量 KOL是俄罗斯的一群Delphi fans有感于VCL的宏大而创造的一个framework工程 里面与VCL相似包含了大量的窗体等等操作封装的控件...不熟悉的一又友 不错去官方主页上看一下KOL+MCK,官方主页: 咱们这里主要使用到的是KOL的sysdcu库.这个是一个优化的中枢库.Delphi7优化的很好 照旧上头的代码咱们进行优化培育...使用指定的中枢库 菜单接管->Project->Options->Directories/Conditionals-Search path 在这个选项中接管中枢库的位置(其实一般亦然用于培育..控件的源代码大概dcu旅途) 培育好编译后 5.5k 检察导入表发现,竟然唯独kernel32和user32这两个库... 体积竟然缩减了这样多 其实仔细对比一下system.pas就不错发现其中的微妙 许多不必要的函数操作单位函数和历程被取消掉了... 下场特别不欢娱(比如几个函数齐没倡导用了...Write,Writeln函数等等Readln函数等) 不外对于写Windows门径来说不大.KOL库中有有意的console函数 是不是念念说什么?合作VCL试试?我建议专家毁灭这个念念法,因为VCL本人需要这些不著名和著名 的一些函数和声明,欧美色色不信你不错试试编译一下~Delphi就会大量请示你编译造作,许多 VCL本人需要的东西齐被优化掉了... 好了不时咱们的优化之旅 [2]自修改中枢库 看完上头的两个考试后是不是有感,user32是咱们需要的阿谁函数,然而..kernel32中照旧有 大量的咱们不需要的函数... 是的,kol固然进行的优化,然而他必须保证一些基本的操作函数存在 举例string...string这个类型以后的其他著述我会详备先容的... string的逃避操作亦然许多的.和MFC的CString其实差未几~肖似的性质辛苦 只是string作念的很好让许多东说念主误认为阿谁等于一个字符串类型... 对于遴选问题在这里我就未几鬼话了...说说优化吧... 对于咱们来说string亦然不需要的因为咱们有了PChar(别说不知说念是什么其实等于char *) 由于咱们要最终打造一个唯惟一个迷你化的库,迷你到什么进度? 需要什么函数他就给咱们保留什么函数其他的什么齐不需要.好的为了这个主义咱们不时 服气有些东说念主看过潘爱民敦厚的Delphi源码分析这本书,说真话我莫得看过, 只是在CSDN上看了一下目次,发现其中的许多东西齐是专家应该知说念的知识 我方穷也没钱买,Google不错搜一下电子版(电子版我也莫得.太懒~巧合刻我宁可看漫画) 文中提到Nico大牛的MiniDExe这个我方优化的迷你EXE演示(见附件) MiniDExe.zip 咱们来看一下基本的代码.其实system,sysinit中的代码仍是被删除的差未几了 只保留了最基本的...
unit SysInit; interface var TlsIndex: Integer; TlsLast : Byte; PtrToNil: Pointer; var HInstance: Pointer; GetCommandLine: PAnsiChar; procedure _InitExe; implementation procedure _InitExe; assembler; asm mov eax, [ebp+$08] mov [HInstance], eax mov eax, [ebp+$10] mov [GetCommandLine], eax end; end.
unit System; interface type TGUID = record D1: LongWord; D2: Word; D3: Word; D4: array[0..7] of Byte; end; TDLLProc = procedure(Reason: Integer); TDLLProcEx = procedure(Reason: Integer; Reserved: Integer); procedure _Halt0; procedure _HandleFinally; var ExitCode: Integer; implementation procedure _Halt0; assembler; asm mov eax, [ExitCode] leave end; procedure _HandleFinally; assembler; asm mov eax, True end; end.这些齐是最基本的中枢库了OD追踪一下发现
00401124 > $ 55 push ebp 00401125 . 8BEC mov ebp, esp 00401127 . 83C4 F0 add esp, -10 0040112A . B8 FC104000 mov eax, 004010FC 0040112F . E8 14FFFFFF call 00401048 00401134 . 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL 00401136 . 68 4C114000 push 0040114C ; |Title = "By Anskya" 0040113B . 68 58114000 push 00401158 ; |Text = "Hello World!" 00401140 . 6A 00 push 0 ; |hOwner = NULL 00401142 . E8 4DFFFFFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA 00401147 . E8 B4FEFFFF call 00401000只是剩下这些东西. 导入表下也剩下了user32.MessageBoxA 由于弗成使用Windows.pas单位中的函数了是以不得不使用我方编写的 援用单位了. 目下体积:3.5k [3]导入表的优化 不知说念专家驻守过莫得...Delphi生成的PE很奇怪.为什么这样说呢 1.不著名的资源 2.导入表的胡乱创建 3.不分场面的重定位表 咱们这里说说导入表的奇怪景况 见代码:Project4 [图4]
program Project4; uses Windows, Unit1, Unit2; var hSelfModule: HMODULE; szBuffer: Array[0..MAX_PATH] Of Char; begin hSelfModule := GetModuleHandle(nil); ZeroMemory(@szBuffer, SizeOf(szBuffer)); szBuffer[GetModuleFileName(hSelfModule, szBuffer, SizeOf(szBuffer))] := #0; BoxFun1(); BoxFun2(); MessageBox(0, szBuffer, 'By Anskya', 0); end.单位1,单位2齐是相似的代码
unit Unit1; interface uses Windows; procedure BoxFun1(); implementation function MessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall; external user32 name 'MessageBoxA'; procedure BoxFun1(); begin MessageBoxA(0, 'Hello Wolrd!', 'Fun1', 0); end; end.然而导入表中确出现了许多高出的东西. 比如说代码中调用了GetModuleHandleA函数一次,然而导入表中确出现了三次... user32.MessageBoxA竟然出现了四次... 由于代码的浮滑也会产生大量的~重叠导入表函数 为此只可建议专家尽量的把声明和援用代码齐尽量写在一个单位中... 专家不错使用PEID大概Stud_PE自行检察演示门径的导入表 [4]进一步优化 上头说了Delphi会产生一些特别败兴的垃圾 底下说说最大的两个部分. 1.资源 2.重定位表 岂论咱们是否使用了资源,Delphi临了生成的资源目次中长久会产生资源目次 对于这个部分的优化我只可建议专家使用ResHacker大概Restorator进行删除 其实这个资源也包含了专家的一些代码信息 RCData->PACKAGEINFO 资源中就包含了门径主dpr中包含的代码单位... DEDE亦然凭证这个文献检察你的Delphi门径一些信息的 删撤退这些没用的资源不错减少0.5k体积 目下咱们的门径唯独3k体积了 祛除重定位表.Delphi给咱们添加的.一般来说没什么用根撤退也就根撤退吧 祛除器具许多,专家我方找找Stud_PE我方手工删除也不错 手工删除资源和重定位表后...门径体积唯独2.5k了 和VC指定进口点编译也没啥区别... Mew11 1.2SE压缩后 861字节...不知说念专家舒坦否?不舒坦? 剩下占用大量体积的东西咱们望望也就知说念了...大量不消的数据段 在VC中不错通过培育编译参数来进行段归拢.Delphi没这麽强的参数 况兼编译的时候会产生大量的垃圾...那怎么办呢? 那就唯独祭出绝招...武力调教萝莉了... 看下篇
[培训]《安卓高档研修班(网课)》月薪三万计较心电图 偷拍心电图 偷拍,掌合手调试、分析归附ollvm、vmp的秩序,定制art凭空机自动化脱壳的秩序
suzyq 足交 上传的附件: Delphi之萝莉调教篇(上篇).rar (158.59kb,340次下载) 图1.jpg (40.87kb,1814次下载) 图2.jpg (33.21kb,1803次下载) 图3.jpg (32.63kb,1807次下载) 图4.jpg (41.72kb,1807次下载) MiniDExe.zip (5.89kb,68次下载)