【目 标】:商业类的东西不便说出名字 【工 具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F 【目 的】: 通过注入代码,在程序运行前显示一个提示框 【操作平台】:Windows 2003 server 【作 者】: LOVEBOOM[DFCG][FCG][US] 【简要说明】: 相信会脱这个壳的人已经有很多很多了,在你想明白怎么注入代码之前,你得有一点基础知识,对这个壳比较了解,这篇文章是 讲如何注入,并非脱壳分析,如果你想知道如何脱壳,可以看我以前的文章和别的网友的文章,如果那些文章你都看懂了,而你有一定的基础,相 信这篇文章对你来说是非常简单的:-)。 【详细过程】: 正式开始前先讲一些:这个壳经常伪装成别的壳来欺骗检测工具的检测,骗过对壳没有了解的朋友。这次我找的目标也同样伪装了,这次伪装 成*Neolite 2.0 -> Neoworx Inc.*的了,如果你按那个壳的方法去操作肯定是没有结果的。 这个壳的反跟踪比较多,有精彩代码值得我们学习的。用OD跟踪比用SICE跟踪更为方便,异常太多了。花指令也是做的比较有个性的:-)。 用OD跟踪的的话,只有一个anti-debug可以防止我们跟踪。 也许你会说,直接在壳代码处就改自己的代码不就行了吗?是的,没错。我选择在程序代码解压出来之后再出现信息框是想说,代码已经解压出来 了,你可以修改程序的流程了,可以暴力破解或找修改壳的流程,去除全部的anti-debug让壳和upx一样等等,只有想不到的,没有做不到的。 要在壳运行过程中添加提示信息的话,先得找入手点,找入手点当然比须对壳比较了解,然后考虑我们的写注入的东西里要用到哪些东西,这些东 西又从哪里获取,是自己添加还是直接借用壳的。Patch代码又存放到哪里,是否有足够的空间。等等。 我选择的是在壳解压出程序的代码后,壳CRC检测时用到的UnmapViewOfFile作为入口点,我做的方式是在壳入口处就开始hook掉该进程的UnmapViewOfFile, 让壳执行这个程序之前先显示我想显示的对话框。Hook的过程我们要修改进程空间的代码,所以我们就得先获取相关权限,然后修改内存页,让相关空 间代码能够修改,这个过程我们就得知道,我这里偷了下懒,作为完整的写法应该是修改完后,还原程序代码,然后把相关权限也写回去的,我没有写还 原代码的。获取和修改权限就得用到VirtualQuery和VirtualProtect,用VirtualQuery获取原有的权限后应该保存一个地方呀,这个地方我选择动态申请,动 态申请用取了VirtualAlloc和VirtualFree这两个API。添加信息框要用到MessageBoxA这个Api,这个API在USER32.DLL中,壳开始的时候并没有加载这个dll,所 以还得用到LoadLibraryA,载入了DLL之后,还得取api的地址呀,所以就用到了GetProcAddress,用GetProcAddress中要用到DLL的句柄,获取句柄的话就得用 到GetModuleHandleA。还好壳里已经有GetModuleHandleA这个api。总结一下用到了这么些API: GETMODULEHANDLEA GETPROCADDRESS LOADLIBRARYA VIRTUALALLOC VIRTUALFREE VIRTUALQUERY VIRTUALPROTECT UnmapViewOfFile MESSAGEBOXA 要用的API已经得到,要提示信息还得到在空地上写上想提示的信息,还得把要动态获取地址的API的名字写上去,还得把那两个DLL的名字都写上去。 OK,自己想了这么些情况,然后开始动手: 用peid看了一下报告成伪壳,随便在段后面的空间里写的点东西,再运行,发现程序不让运行,这说明程序有检测。用LordPE看看只有少数几个api函数: ->Import Table 1. ImageImportDescriptor: OriginalFirstThunk: 0x0007E079 TimeDateStamp: 0x00000000 (GMT: Thu Jan 01 00:00:00 1970) ForwarderChain: 0x00000000 Name: 0x0007E089 ("KERNEL32.dll") FirstThunk: 0x0007E079 Ordinal/Hint API name ------------ --------------------------------------- 0x0000 "GetProcAddress" 0x0000 "LoadLibraryA" 0x0000 "GetModuleHandleA" 看到这些输入表信息我们就能达到目标了(如果输入表为空的话,能不能达到我的目的呢?答案是肯定的。因为壳自己也要用到API,壳用什么方法获取,我们也模拟它来完成使命。) 上面分析后代码量可能比较大,所以还得找找有没有足够的空间。所以用lordpe看看程序的”空地”有多少,壳是加密后,通过在原程序的基础上增加一个段来保存解壳代码,所 以我们看看最后一个段有没有足够的空间。最后一个段的信息: item: Name: VirtualSize: 0x00014000 VirtualAddress: 0x0007E000 SizeOfRawData: 0x00014000 PointerToRawData: 0x00029A00 PointerToRelocations: 0x00000000 PointerToLinenumbers: 0x00000000 NumberOfRelocations: 0x0000 NumberOfLinenumbers: 0x0000 Characteristics: 0xC0000040 (INITIALIZED_DATA, READ, WRITE) 看了下空间不是很多,所以自己修改下,把空间改大点,添加了&H1000的空间,这样可以放足够的代码了。修改后: Name: VirtualSize: 0x00015000 ************ VirtualAddress: 0x0007E000 SizeOfRawData: 0x00015000 ************ PointerToRawData: 0x00029A00 PointerToRelocations: 0x00000000 PointerToLinenumbers: 0x00000000 NumberOfRelocations: 0x0000 NumberOfLinenumbers: 0x0000 Characteristics: 0xC0000040 (INITIALIZED_DATA, READ, WRITE) 修改好后用OD载入目标,现在来获取LoadLibraryA、GetModuleHandleA、GetProcAddress , 00491DAD > /E9 00000000 JMP 00491DB2 ; EP,伪装别的壳的入口 00491DB2 /60 PUSHAD 00491DB3 E8 14000000 CALL 00491DCC 00491DB8 5D POP EBP 载入后,下命令g GetModuleHandleA,断下后,通过堆栈看看GetModuleHandleA载入地址: 0012FF9C 0047E117 /CALL to GetModuleHandleA from cjbo.0047E114 0012FFA0 0047E089 /pModule = "KERNEL32.dll" …… 0047E114 FF53 08 CALL DWORD PTR DS:[EBX+8] ; 这里调用GetModuleHandleA 0047E117 8BF8 MOV EDI,EAX ; 返回到这里 计算一下得知GetModuleHandleA保存在0047E081处。因为IAT地址一般是连续的,这样的话,直接DD 47e081看看数据窗口就知道其它两个API保存的位置了: 0047E079 >77E12DFB kernel32.GetProcAddress 0047E07D >77E1850D kernel32.LoadLibraryA 0047E081 >77E12CD1 kernel32.GetModuleHandleA 因为关系到重定位,所以为了防止意外我用到相对地址的方式来获取实际地址。 第一步已经完成了,第二步看看UnmapViewOfFile在哪里调用,看它的原因是去找CRC检测数据。重来, 这次要去除ZwSetInformationThread这个anti-ring3’debug,否 则壳会脱离Debugger,让调试器不能跟踪。去除ZwSetInformation时要注意不能直接改成RET 10之类的,壳会检测的: 00382CB2 8A06 MOV AL,BYTE PTR DS:[ESI] 00382CB4 3C B8 CMP AL,0B8 ; 开始检测了,判断是否为mov eax,xxxxxx的方式,如果不是则跳 00382CB6 75 04 JNZ SHORT 00382CBC 00382CB8 A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] 00382CB9 A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES> 00382CBA EB 33 JMP SHORT 00382CEF 00382CBC 3C 8D CMP AL,8D 00382CBE 75 03 JNZ SHORT 00382CC3 ; 判断是否为LEA的方式 00382CC0 A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES> 00382CC1 EB 2C JMP SHORT 00382CEF 00382CC3 3C CD CMP AL,0CD ; 判断是否为Int xx的入口 00382CC5 75 04 JNZ SHORT 00382CCB 00382CC7 66:A5 MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI] 00382CC9 EB 24 JMP SHORT 00382CEF 00382CCB 3C BA CMP AL,0BA ; 判断是否为mov edx,address的方式 00382CCD 75 04 JNZ SHORT 00382CD3 00382CCF A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] 00382CD0 A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES> 00382CD1 EB 1C JMP SHORT 00382CEF 00382CD3 3C FF CMP AL,0FF ; 判断是否为push [address]的方式 00382CD5 75 04 JNZ SHORT 00382CDB 00382CD7 66:A5 MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI] 00382CD9 EB 14 JMP SHORT 00382CEF 00382CDB 3C C2 CMP AL,0C2 ; 判断是否为RET val的方式 00382CDD 75 0A JNZ SHORT 00382CE9 00382CDF A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] 00382CE0 66:A5 MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI] 00382CE2 61 POPAD 00382CE3 33C0 XOR EAX,EAX 00382CE5 40 INC EAX 00382CE6 C2 0C00 RETN 0C 00382CE9 61 POPAD 00382CEA 33C0 XOR EAX,EAX 00382CEC C2 0C00 RETN 0C 当然如果你的目标不是新版本的不会检测的。 去除这个anti-Debug后,follow UnmapViewOfFile,在RET 4处下断。运行中断后,取消断点,返回壳代码: 0037DAB9 FFB5 64174100 PUSH DWORD PTR SS:[EBP+411764] ; 返回到这里 0037DABF 7C 05 JL SHORT 0037DAC6 0037DAC1 EB 05 JMP SHORT 0037DAC8 0037DAC3 0FCD BSWAP EBP 0037DAC5 2074F9 8D AND BYTE PTR DS:[ECX+EDI*8-73],DH 0037DAC9 859D C34000EB TEST DWORD PTR SS:[EBP+EB0040C3],EBX 0037DACF 020F ADD CL,BYTE PTR DS:[EDI] 0037DAD1 0F50E8 MOVMSKPS EBP,XMM0 0037DAD4 04 00 ADD AL,0 0037DAD6 0000 ADD BYTE PTR DS:[EAX],AL 0037DAD8 CD 20 INT 20 0037DADA - E9 6883C404 JMP 04FC5E47 0037DADF 8B85 A2184100 MOV EAX,DWORD PTR SS:[EBP+4118A2] ; CloseHandle 0037DAE5 EB 04 JMP SHORT 0037DAEB 没跟多久看会看到,CRC的比较了。 0037DC7E 3BF7 CMP ESI,EDI ; 到这里进行CRC检测 0037DC80 0F85 F65E0000 JNZ 00383B7C ; 不等则over 其中ESI是计算后的结果,EDI就是正确的CRC值,这里就有三种去除方式了,第一种在把crc值保存在文件中,第二种mov esi,edi,的方式,第三种直接改成nop。 用LordPE看一下正确的CRC值正是保存在PE header-4处。 004000F0 00 00 00 00 00 00 00 00 00 00 00 00 61 95 C1 32 ............a暳2 00400100 50 45 00 00 4C 01 03 00 19 5E 42 2A 00 00 00 00 PE..L . ^B*.... 原程序没修改时的正确CRC值为32c19561,这个值是换算后的。换算方法是: KEY==CRC xor Key(048F7032) key==KEY ROR 3 如果你现在直接在od里是看不到程序解码的,因为我并没有处理DRx部分。这篇文章是讲代码注入的,所以我不讲那些东西。 现在我们的CRC值的信息已经找到,也知道是哪里用UnmapViewOfFile这个函数,现在只需在壳入口处写上自己的代码,然后在上面比较CRC值是否正确的地方, 把正确的检测值,保存到pe header-4处。现在只差写代码,我在这里开始写: 00491DCC 5D POP EBP ; 我从这里开始修改,我通过相当地址来计算实际地址的,EBP== 00491DB8 过了这里后,记下EBP的值,然后和上面获取的地址运算后得到实际地址 00491DCD E8 0E000000 CALL 00491DE0 ; 先取Kernel32.dll的句柄 整理了一下代码: start: call @F @@: pop ebp ;获取EBP的值 call @F db 'Kernel32.dll',0,0 @@: CALL DWORD PTR SS:[EBP+0FFFEC2C9h] ;获取Kernel32.dll的句柄 MOV DWORD PTR SS:[EBP+500h],EAX ;保存句柄 call @F db 'VirtualAlloc',0 @@: PUSH DWORD PTR SS:[EBP+500h] ; push hModule CALL DWORD PTR SS:[EBP+0FFFEC2C1h] ; GetProcAddress MOV DWORD PTR SS:[EBP+504h],EAX ;保存VirtualAlloc的地址 call @F db 'VirtualQuery',0 @@: PUSH DWORD PTR SS:[EBP+500h] ; push hModule CALL DWORD PTR SS:[EBP+0FFFEC2C1h] ; GetProcAddress MOV DWORD PTR SS:[EBP+508h],EAX ;保存VirtualQuery的地址 CALL @F DB 'VirtualProtect',0,0 ;因为我自己是用od直接写的代码,所以我现在整理把那些多余的0都写进来 @@: PUSH DWORD PTR SS:[EBP+500h] ; push hModule CALL DWORD PTR SS:[EBP+0FFFEC2C1h] ; GetProcAddress MOV DWORD PTR SS:[EBP+50Ch],EAX ;Save address CALL @F db 'VirtualFree',0,0 @@: PUSH DWORD PTR SS:[EBP+500h] ; push hModule CALL DWORD PTR SS:[EBP+0FFFEC2C1h] ; GetProcAddress MOV DWORD PTR SS:[EBP+510h],EAX ;SaveAddress CALL @F db 'User32.dll',0,0 @@: CALL DWORD PTR SS:[EBP+0FFFEC2C5h] ;Load Library user32.dll CALL @F db 'MessageBoxA',0 @@: push eax ;push hModule db 5 dup (90h) CALL DWORD PTR SS:[EBP+0FFFEC2C1h] ; GetProcAddress MOV DWORD PTR SS:[EBP+514h],EAX ;save address call @F db 'UnmapViewOfFile',0,0 @@: PUSH DWORD PTR SS:[EBP+500h] ; push hModule CALL DWORD PTR SS:[EBP+0FFFEC2C1h] ; GetProcAddress MOV DWORD PTR SS:[EBP+518],EAX ;save address PUSH 4h ; /Protect = PAGE_READWRITE PUSH 1000h ; |AllocationType = MEM_COMMIT PUSH 28h ; |Size = 28 (40.) PUSH 0 ; |Address = NULL CALL DWORD PTR SS:[EBP+504h] ; /VirtualAlloc MOV DWORD PTR SS:[EBP+52Ch],EAX ; 保存hMeM MOV ESI,EAX ; 获取权限 PUSH 28h ; /BufSize = 28 (40.) PUSH ESI ; |Buffer = 003A0000 PUSH EDI ; |Address = kernel32.UnmapViewOfFile CALL DWORD PTR SS:[EBP+508h] ; /VirtualQuery LEA EAX,DWORD PTR DS:[ESI+14h] ; 准备修改权限 PUSH EAX ; /pOldProtect = 003A0014 PUSH 40h ; |NewProtect = PAGE_EXECUTE_READWRITE LEA EAX,DWORD PTR DS:[ESI+0Ch] ; | PUSH DWORD PTR DS:[EAX] ; |Size = 78000 (491520.) PUSH DWORD PTR DS:[ESI] ; |Address = kernel32.77E16000 CALL DWORD PTR SS:[EBP+50Ch] ; /VirtualProtect PUSH EBX ; 修改API入口代码 MOV EAX,DWORD PTR SS:[EBP+518h] INC EAX LEA EBX,DWORD PTR SS:[EBP+196h] SUB EBX,EAX SUB EBX,5h MOV BYTE PTR DS:[EAX],0E8h MOV DWORD PTR DS:[EAX+1],EBX POP EBX ; 7FFDF000 POPAD ;JMP 0047E0D6 ; 跳去执行原壳的流程 end start 修改API入口入+1的代码为: 77E1667C > 53 PUSH EBX ;API入口 77E1667D E8 CCB86788 CALL cjb.00491F4E 然后在491F4E处写上相关的代码就可以了: 00491F4E 60 PUSHAD 00491F4F E8 00000000 CALL 00491F54 00491F54 5D POP EBP 00491F55 8B85 7C030000 MOV EAX,DWORD PTR SS:[EBP+37C] 00491F5B C740 01 8B5C240>MOV DWORD PTR DS:[EAX+1],8245C8B ; 还原API的代码 00491F62 C640 05 56 MOV BYTE PTR DS:[EAX+5],56 00491F66 8D40 01 LEA EAX,DWORD PTR DS:[EAX+1] 00491F69 894424 20 MOV DWORD PTR SS:[ESP+20],EAX 00491F6D 9C PUSHFD 00491F6E 6A 40 PUSH 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL 00491F70 8D85 AC000000 LEA EAX,DWORD PTR SS:[EBP+AC] ; | 00491F76 50 PUSH EAX ; |Title = "Demo" 00491F77 8D85 B2000000 LEA EAX,DWORD PTR SS:[EBP+B2] ; | 00491F7D 50 PUSH EAX ; |Text = "Hying's Armor v0.7x Code Injection Demo 00491F7E 6A 00 PUSH 0 ; |hOwner = NULL 00491F80 FF95 78030000 CALL DWORD PTR SS:[EBP+378] ; /MessageBoxA 00491F86 9D POPFD 00491F87 61 POPAD 00491F88 C3 RETN 代码已经写好了,保存一下,然后通过上面找CRC 的方式找出实际的正确值。写在PE HEADER-4处: 004000F0 00 00 00 00 00 00 00 00 00 00 00 00 07 61 90 D6 ............a愔 00400100 50 45 00 00 4C 01 03 00 19 5E 42 2A 5B 4C 6F 72 PE..L . ^B*[Lor 全部修改完,保存为文件,试试就可以成功了。再说一下,因为是商业性的东西,所以我不以具体怎么破解之类的来写。 Greetz: Fly.Jingulong,yock,tDasm.David.hexer,hmimys,ahao.UFO(brother).alan(sister).all of my friends and you! By loveboom[DFCG][FCG][US] http://blog.youkuaiyun.com/bmd2chen Email:loveboom#163.com Date:2005-6-6 17:59
相关推荐
深入解析:el-table合并单元格
在企业级应用开发中,我们经常需要处理复杂的数据展示需求。在构建复杂的数据展示后台时,我们常常需要将表格中具有相同属性的行进行视觉上的合并,以提升信息的聚合度和可读性。在 Element Plus 的 el-table 组件中,span-method 属性是实现单元格合并的核心机制,允许开发者自定义单元格的合并逻辑,开发者可以通过实现自定义合并策略来满足各种负责需求。 合并行的本质是通过计算相邻行数据的相似性,确定满足合并的单元格范围,然后通过 DOM 操作将多个单元格合并为一个。这种操作在前端数据可视
Intel SSE / MMX2 / KNI documentation
转自 http://intel80386.com/simd/mmx2-doc.html Please note, this is a work-in-progress (ie BETA). Timings are of approximate throughput cycles using average from TSC, the latency and ranges are
<蓝桥杯软件赛>零基础备赛20周--第16周--GCD和LCM
gcd,lcm
加壳工具简介
<br />1.程序编写语言: <br />常见的程序制作语言有:<br />Borland Delphi 6.0 - 7.0<br />Microsoft Visual C++ 6.0<br />Microsoft Visual Basic 5.0 / 6.0<br />还有汇编、易语言等。 很多软件都通过加壳保护来提高软件的破解难度,下面我们简单的介绍一下加壳工具。 <br />2.软件加壳工具介绍: <br />II 压缩壳介绍: <br />常见压缩壳有:ASPack、UPX、PeCompact、N
八大排序算法——(万字图文详解)
本篇博客将对“直接插入排序”、“希尔排序”、“直接选择排序”、“堆排序”、“冒泡排序”、“快速排序”、“归并排序”、“计数排序”进行详细的解析(算法逻辑、具体实现过程、时间复杂度、稳定性),并附以图片帮助大家更好地理解算法逻辑以及实现每个排序的参考代码。
别再手动配电脑了!手把手教你用Windows Server 2022搭建企业AD域(附DNS配置避坑指南)
本文详细介绍了如何使用Windows Server 2022搭建企业AD域,提升20+终端的管理效率。通过实战案例和避坑指南,解析AD域的核心价值、部署步骤及DNS配置技巧,帮助企业实现集中权限管理、安全策略统一部署,显著降低IT运维成本。
国外知名破解软件源 HYI源
HYI源 repo.hackyouriphone.org国外知名破解软件源
Python爬虫实战:社交媒体热点事件追踪与情感分析可视化
本文探讨了如何利用Python爬虫技术从微博和Twitter等社交媒体平台抓取数据,进行热点事件追踪和情感分析,并通过可视化方式展示舆论情感变化。文章详细介绍了最新的爬虫技术、数据处理方法和可视化实现,提供了完整的代码示例,帮助读者构建自己的社交媒体分析系统。关键词:Python爬虫、社交媒体分析、情感分析、数据可视化、热点追踪爬虫框架:Requests-HTML、aiohttp、Twint(Twitter专用)数据处理文本处理:Jieba(中文分词)、NLTK(英文处理)情感分析。
Eighth season nineteenth episode,the interview for Joey,will he say something wrong??????
[Scene: Monica and Chandler's, everyone except Phoebe is there as Rachel enters carrying a magazine.] Rachel: Hi! Ross: Hey! Monica: Hey! Rachel: So, I'm in my apartment doing the Soap Opera Digest crossword puzzle, and guess who the clue is for three down
【系列05】端侧AI:构建与部署高效的本地化AI模型 第4章:模型量化(Quantization)
量化的基本思想是减少模型中用于表示参数和激活值的比特数。在模型训练时,参数通常使用32位浮点数(FP32)进行存储,这提供了高精度,但也消耗大量的内存和计算资源。量化则将这些32位浮点数转换成低比特数表示,通常是8位整数(INT8)。量化的原理可以概括为:对浮点数范围进行校准,并将其映射到更小的整数范围内。例如,将一个FP32的权重(如-1.5到1.5)映射到INT8的范围(-128到127)。在推理过程中,模型将使用这些低精度的整数进行计算,从而大大减少了所需的计算量。量化带来的主要收益减少模型大小。
YOLOv12涨点改进 | 独家创新-注意力改进篇 | ECCV 2024 | YOLOv12引入AgentAttention代理注意力模块,兼顾 Softmax 和线性注意力优点,提高检测精度
🔥本文给大家介绍使用Agent Attention模块改进YOLOv12网络模型。其主要作用是通过引入高效的代理token来减少计算复杂度,同时保留全局上下文建模能力。相比传统的Softmax注意力,Agent Attention通过代理token聚合并广播信息,从而降低了模型在处理高分辨率图像时的计算负担,并显著提高了推理速度。其优势在于保持了目标检测中的全局信息处理能力,同时加速了生成过程,特别是在高分辨率场景下,可以提高检测精度、减少内存消耗,并提升处理速度。
Seventh season twenty-second episode,Chandler and Monica went to find his father,a beautiful “woman“
[Scene: Monica and Chandler's, Phoebe, Monica, and Rachel are sitting around the kitchen table as Ross enters.] Ross: Hey! Monica: Hey! Ross: Hey uh Mon, I saw the Porsche parked out front, can I get the keys? Thought I'd take that bad boy out for a little
多天线技术:5G波束成形&空间复用&空时编码
以提升信号的可靠性。然而,在20世纪90年代中期,研究者们惊讶地发现,多天线技术不仅仅提供分集增益,还可以开启一些单天线系统无法实现的新机遇。,我们可以将信道矩阵 ( H ) 视为一个满秩矩阵,则理论上可以建立min(𝑁𝑇,𝑁𝑅)个独立的数据流,形成一个。波束成形是5G物理层的核心技术,其本质是利用多个天线来增强特定方向上的信号,同时抑制干扰方向的信号。:物理波束成形 = 🔦 类似手电筒的聚焦光束,虚拟波束成形 = 🌊 类似水波的相干叠加。随着 5G 和 6G 时代的到来,多天线技术的作用愈发重
搜索引擎学习资源收集
一、搜索引擎技术/动态资源、综合类1、卢亮的搜索引擎研究 http://www.wespoke.com/卢亮属于搜索引擎开发上的专家,以前开发过一个搜索引擎"博索"(http://booso.com/),好像现在已经停止开发了,目前他服务于博客网。在他的这个blog上可以了解许多搜索引擎开发的技术和经验,值得持续关注。2、laolublog 有不少来自国外的关于
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
Sixth season fifteenth and sixteenth episode,things that could have been......(没有如果)
[Scene: Central Perk, everyone is there as Rachel enters.] Rachel: Hey, you guys! Guess what? Barry and Mindy are getting a divorce! Monica: Oh my God! Phoebe: Wow! Joey: (To Ross) What is the matter with you?! Phoebe: No! Barry and Mindy. Joey: Oh sorry,
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
Mexican lolita ghds sale images
The clip-on hair extensions are available cheap ghd a variety of different colors and lengths will be the very...
Eighth season fifteenth episode,Joey fell in love with Rachel??????
[Scene: Central Perk. Rachel is getting a cup of coffee as Joey and Phoebe enter and sit down.] Phoebe: Oh! Hey, Rach! Rachel: Hi! Hey, Happy Valentine's Day! Phoebe: Oh, you, too. Joey: Hey, so, uh, how's it going living over at Ross'? Rachel: It's good.
900+ Online Private Torrent Trackers: 2009 Edition
Private trackers comeand go, making it virtually impossible to keep a current updated list.Due to popular demand, we’ve cleaned up our Trackers Listby removing the dead sites while adding a slew
arm linux漏洞,Linux/ARM - Bind (/TCP) Shell Shellcode (104 bytes)
/**Copyright © 2017 Odzhan. All Rights Reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditions aremet:1. Redistrib...
OK. Let's start learning English from 《Friends》.
I know my English is poor. But I'm work hard on it. Today,I'd like to share some useful resoure to all of you here. It's <Friends> Movie Download address. 第一季 http://210.43.133.148:81/ysdh...
How Stable Diffusion was built: Tips and tricks to train large AI models
Ok. Cool.233 people?
10000 pcs free gift of chinese top grade brown film faced plywood
We LongDa Wood manufacture hardwood core 3 time hot press Brown film faced plywood. The core of this kind Brown film faced plywood is made from 13 layers for 18mm thickness plywood. Brown film
再谈野指针问题Free Heap block xxx modified at xxx after it was freed
Free Heap block XXXXXX modified at XXXXXX after it was freed 相信不少朋友碰到过以上问题,而往往苦于无法定位到错误的代码位置,其实出现该问题一般就是使用了野指针导致的. 那么何为野指针呢? 野指针与NULL指针不同.所谓野指针是指指针所指的内存已经回收,而继续使用该指针,导致未定义行为. 例如:
Best Practices for Speeding Up Your Web Site (from Yahoo! Developer Network)
http://developer.yahoo.com/performance/rules.html The Exceptional Performance team has identified a number of best practices for making web pages fast. The list includes 34 best practices divided
推荐学习笔记-概率和朴素贝叶斯
先验概率(prior probability): 对一个假设(hypothesis)/事件 发生已知的概率,记为P(h)。如: 抛一枚硬币,证明朝上的先验概率是 P(h) = 0.5 后验概率(posterior probability): 在特定数据/情景下,某事件发生的概率, 记为P(h|d). P(D): 某事/条件出现的概率 P(D|h): 在h发生时, 某事出现的概率。
调试异常: Free Heap block xxxxxxxx modified at xxxxxxxx after it was freed
Global Flags Free Heap block
调研目前主要的开源网络爬虫,并且说明各自的特点、局限性以及相互之间的区别
PB10210016徐波-第一次作业 Chp.2 Web Crawling 调研目前主要的开源网络爬虫,并且说明各自的特点、局限性以及相互之间的区别。提交方式:word打印稿。 答:网络蜘蛛(Web spider)也叫网络机器人,指的是“自动化浏览网络”的程式。这样的电脑程式是为了自动从网络撷取特定的资料,或为了组织网络上的资料,所设计的自动浏览网络的程式。Spider只是个别爬虫的名称。业
231



被折叠的 条评论
为什么被折叠?



