x64 findkernel32 shellcode 45byte


unsigned char x64_GetKernel32[45] = { 0×56, 0×57, 0×53, 0×48, 0×33, 0xDB, 0x6A, 0×30, 0×58, 0×65, 0×48, 0x8B, 0×30, 0×48, 0x8B, 0×46, 0×60, 0×48, 0x8B, 0×40, 0×18, 0×48, 0x8B, 0×70, 0×10, 0×48, 0x8B, 0x7E, 0×60, 0×48, 0x8B, 0×46, 0×30, 0×48, 0x8B, 0×36, 0×38, 0x5F, 0×18, 0×75, 0xF0, 0x5B, 0x5F, 0x5E, 0xC3 }; 纯字符,无截断,执行后,rax就是kernel32基址. winxp ~7 x64通用

x64 gs搜索kernel32


编写shellcode很重要的一步就是搜索kernel32的基址,毕竟我们要获取API的地址 x86下总所周知的fs寄存器搜索kernel32基址的办法,在x64下已经失效了. 鉴于网上的资料太少,也许是我没搜索到.暂且写一段分享. x64下fs的角色已经换成了gs. 暂时发现存储的一些感兴趣的东西,如果有其他的,希望能告知我. gs:[0x30]                 TEB gs:[0x40]                 Pid gs:[0x48]                 Tid gs:[0x60]                PEB gs:[0x68]                 LastError 值得一提的是,虽然gs:[0x60] 直接存放的PEB,但是由于vista/7后的地址随机化机制,还是从TEB获取比较靠谱. 0:009> dt 000007fffff98000 _TEB ntdll!_TEB +0×000 NtTib            : _NT_TIB +0×038 EnvironmentPointer : (null) +0×040 ClientId         : _CLIENT_ID +0×050 ActiveRpcHandle  : (null) +0×058 ThreadLocalStoragePointer : (null) +0×060 ProcessEnvironmentBlock : 0x000007ff`fffd5000 _PEB    //这里即是PEB //用c语言描述就是 #define x64_GetPeb()               [...]

vc6的RTTI默认是关闭的


c++里使用了dynamic_cast ,就必须把编译器的RTTI打开,不解释. 使用05建的工程,比较和谐,但是生成6.0的工程时,程序死的很难看. 百撕不得骑姐,搞了半天才注意到,VC6默认是关着的!!! 毕竟还是图样啊.调试到现在,还得提高自身知识水平.

c++ 解析纯真IP数据库qqwry


网上流传的IP数据库等,如纯真,其实是cnss制定的格式. 在项目中有需求,网上找到的几份已有的实现,都不太满意. 索性自己写了一份,以前都只是用用,这次总算弄明白整个格式是怎么样的. 我写的IPInfo是C++ 类的方式,内存映射的方式操作数据,兼容Ansi /Unicode ,自动识别常用的IP数据库名(QQwry.dat 等). 关键的地方注释的比较详细,可以看注释.如果你的项目中复用到这份代码,请注明! 调用起来很简单 1 2 3 4 5 6 char szAddr[100]={0}; CIPInfo NewIPInfo;   NewIPInfo.OpenA("D:\\qqwry.dat";); NewIPInfo.QueryIPA("1.2.3.4",szAddr,sizeof(szAddr)); NewIPInfo.Close(); cnss设计的这个IP数据库的格式,很简洁精妙,字符串复用的方式压缩了很大一部分空间. 其格式描述可以见cnss的blog 经过我的实际分析,有几个网上介绍格式的文章没提到,但是要注意的地方. 1.对于重定位模式1之后地区名也有可能也需要重定位. 2.混合模式1国家名二次重定位之后的地区名也有可能需要重定位. 3.IP存的是小尾字节序. 详细的看我的实现吧. 为什么贴到wordpress格式就乱了呢?? IPInfo.h 声明部分 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [...]

清理Visual Studio工程临时的文件


一键清除Visual Studio的产生的临时的文件,方便SVN提交 保留符号表. 支持参数调用 支持外部调用 以前一直用这个批处理 @echo off del /s /q /A *.log del /s /q /A *.exp del /s /q /A *.ilk del /s /q /A vc*0.pdb del /s /q /A *.ncb del /s /q /A BuildLog.htm del /s /q /A *.obj del /s /q /A *.mac del /s /q /A *.embed.manifest del /s [...]

sin的泰勒级数展开


今天有师弟问到这个,就实现了下 //Main.cpp   #include <Windows.h> #include <math.h> #include <stdio.h>   #define PI 3.141592653 #define ACCURACY 10e-6 #define ACCU_INIT 0.0000000f;   /* ************************************************************************ 功能: 泰勒级数展开计算sin 参数: fAngle 角度 pnTimes 累加次数 作者: cdutboy@gmail.com 创建: 2011.05.30 sinx=x-(x^3)/(3!)+(x^5)/(5!)-(x^7)/(7!)+. ************************************************************************ */ double TinySin(IN float fAngle,OUT int* pnTimes) { double dResult =ACCU_INIT; double dRad =ACCU_INIT; double dSingle =1.0f;   int nIndex [...]

swscanf模式匹配URI


如 http://blog.cdut-boy.com:8080/wiki/URI_scheme.php?a=1#test 完整的URI可以这么解析,可惜swscanf没法表示可选 wnsprintfW(szFormat,100-1,L"%%%d[^:]://%%%d[^:]:%%d/%%%d[^?]?%%%d[^#]#%%%ds",\ XURI_MAX_SCHEME_LEN,XURI_MAX_HOSTNAME_LEN,XURI_MAX_PATH_LEN,XURI_MAX_QUERY_LEN,XURI_MAX_FRAGMENT_LEN);   swscanf(pData,szFormat,m_pszHostName,&amp;m_ulServerPort,m_pszPath,m_pszQuery,m_pszFragment); 不使用正则库的情况下按限定长度解析出协议头.主机名,端口,路径,请求,锚 URI语法参考:http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax

windows的memset效率真高


晚上练习asm,模拟了一段memset, 执行1000*1000*100次,系统的RtlZeroMemery和我的TinyMemset几乎是平手 优化的可真好    

文件搜索


单线程异步搜索的速度超过我的预期, 搜索速度并不随着线程数的增加而加快,超过阀值后,多线程带来的效率已经被线程切换所抵消了,甚至拖慢. 阀值由机器磁盘I/O本身的速度和搜索的算法相关. 晚上简单的写了一个多线程异步搜索,效果还行.

检测马甲dll


是检测而不是对抗,暂时没能想到对抗的方法.