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,&m_ulServerPort,m_pszPath,m_pszQuery,m_pszFragment); 不使用正则库的情况下按限定长度解析出协议头.主机名,端口,路径,请求,锚 URI语法参考:http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax
文件搜索
单线程异步搜索的速度超过我的预期, 搜索速度并不随着线程数的增加而加快,超过阀值后,多线程带来的效率已经被线程切换所抵消了,甚至拖慢. 阀值由机器磁盘I/O本身的速度和搜索的算法相关. 晚上简单的写了一个多线程异步搜索,效果还行.
