![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
逆向工程
lwanttowin
这个作者很懒,什么都没留下…
展开
-
__declspec(naked)和__asm编写实践总结
__cdecl 和 __stdcall 压栈参数顺序是一致的,但平衡堆栈方式不一样。__cdecl调用函数方式是调用者,即函数外部平衡堆栈,一般是在函数外部调用add esp, xxxx,函数内部只需要ret返回就行__stdcall调用函数方式是被调用,即函数内部平衡堆栈,一般在函数内部结束的时候调用ret xxx或者add esp,xxxx ; ret在vs2005里面C++工程默认都是__cdecl,所以需要外部平衡堆栈看一个实例,本来__asm里面本来原意会去取函数参数,并打印出来 //__decl原创 2010-12-11 01:12:00 · 1730 阅读 · 0 评论 -
调试某游戏副本中的加亮提示信息思路
对于经常玩游戏的人比较容易知道,在副本里面,当进行到某个步骤或者当队员站位触发某个情景时,游戏界面中央会出现字体提示字符,可能是BOSS跟你的对话也有可能是游戏给你的下一步提示。让我们分析下,这个情景到底是本地触发还是服务器触发?假设是本地触发,那么问题来了,是不是我可以利用漏洞来告诉服务器我副本直接步骤做完了呢,这里补充下,每到一个步骤告诉服务器是必然的,因为服务器有必要控制副本的奖原创 2016-11-21 19:26:06 · 618 阅读 · 0 评论 -
模拟网页行为之实践四
这篇谈下c++如何hook网页中的JS函数。在谈这个问题之前,需要搞清楚JS执行发生在什么时候。在网页加载过程中,会根据接收到的html文本,去解析对应里面的脚本,样式原创 2016-12-07 20:59:35 · 795 阅读 · 0 评论 -
RSA算法演绎
RSA是第一个也是使用的最广发的公钥加密算法,在1978年由R.Rivest、AdiShamir和Adleman三人发明,并以他们的名字命名。RSA算法的安全性基于大数因子分解的困难性,下面介绍一下它的基本原理:1、生成公钥和私钥(1) 选取两个大素数:p和q;(2)计算n=p*q;(3)计算小于n并且与n互质的整数的个数,即欧拉函数o(n) = (p - 1) * (q转载 2016-12-26 20:21:30 · 793 阅读 · 0 评论 -
windows平台下的反调试技术
在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己。为了了解如何破解反调试技术,首先我们来看看反调试技术。 一、Windows API方法 Win32提供了两个API, IsDebuggerPresent和CheckRemoteDebuggerP转载 2017-03-14 15:49:13 · 1631 阅读 · 0 评论 -
SHA1算法实现及详解
1 SHA1算法简介安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的转载 2017-04-26 13:55:31 · 36272 阅读 · 5 评论 -
RC4算法实现
1、密钥流:RC4算法的关键是根据明文和密钥生成相应的密钥流,密钥流的长度和明文的长度是对应的,也就是说明文的长度是500字节,那么密钥流也是500字节。当然,加密生成的密文也是500字节,因为密文第i字节=明文第i字节^密钥流第i字节;2、状态向量S:长度为256,S[0],S[1].....S[255]。每个单元都是一个字节,算法运行的任何时候,S都包括0-255的8比特数的排列组合,转载 2016-12-02 01:20:58 · 2371 阅读 · 0 评论 -
CRC32算法实现
CRC32 检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像转载 2017-04-26 14:12:56 · 3530 阅读 · 0 评论 -
AES算法重点详解和实现
可以看到,在原始数据长度为16的整数倍时,假如原始数据长度等于16*n,则使用NoPadding时加密后数据长度等于16*n,其它情况下加密数据长度等于16*(n+1)。在不足16的整数倍的情况下,假如原始数据长度等于16*n+m[其中m小于16],除了NoPadding填充之外的任何方式,加密数据长度都等于16*(n+1);NoPadding填充情况下,CBC、ECB和PCBC三种模式是不支持的转载 2017-04-26 15:04:00 · 4270 阅读 · 0 评论 -
protobuf流的反解析Message
0x01 protobuf的基本概念protobuf通过定义".proto"文件来描述数据的结构。.proto文件中用"Message"所表示所需要序列化的数据的格式。Message由field组成,Field类似JAVA或者C++中成员变量,通常一个field的定义包含修饰符、类型、名称和ID。下面看一个简单的.proto文件的例子:package testInfo;原创 2017-08-16 11:47:36 · 17340 阅读 · 5 评论 -
勒索病毒傀儡进程脱壳
样本是:wallet勒索病毒环境:虚拟机VMWARE win7 32位工具:OD c32asm初次拿到样本,先用火绒剑工具监控下病毒样本的流程,可以看到有一个自创建进程的行为。我们等找到OEP后,在CreateProcessA下断点进行跟踪,找到OEP后,对CreateProcessA下断点原创 2017-09-05 11:28:58 · 937 阅读 · 1 评论 -
python3 Crypto环境
最开始想尝试在windows下面安装python3.6,虽然python安装成功,但在安装Cryto模块用pip3 install pycrypto老是会报错。老夫想了半天,原创 2017-12-21 09:19:41 · 7550 阅读 · 2 评论 -
常用的逆向工程钩子
::InitializeCriticalSection(§ion); HMODULE handle = LoadLibrary(TEXT("kernel32.dll")); HMODULE handle2 = LoadLibrary(L"msvcr90.dll"); if (handle != NULL) { pGetQueueCompletionStatusType = (G原创 2012-03-07 09:43:24 · 2004 阅读 · 0 评论 -
模拟网页行为之实践篇三
还有应用场景稍微复杂,点击按钮过后,直接在当前网页弹出个置顶子页面出来,这个时候如果还用模拟点击按钮就不太合适了,需要找到跳转到子页面的实现代码,看是否通过上章的xmlhttprequest方式来去实现或者直接通过Navigate函数来跳转子页面的实现,这都涉及到通过抓包定位js代码实现。还有种更复杂的情况,有网页在加载完成后,会执行js代码去启动第三方安全软件,来保证键盘安全,这个时候就需要原创 2016-11-21 17:55:03 · 857 阅读 · 0 评论 -
模拟网页行为之实践篇二
在模拟网页行为中,最常用的就是提交表单了,其次就是获取验证图片数据,再次hook网页中的js代码的实现。先说具体的应用场景,简单的场景,如填写用户名密码登陆,这里就涉及到获取表单,填写表单数据,提交表单三个过程。在网页数据中,表单的形式一般都会带有名字,ID,提交的处理网页的url和其拥有的几个IHTMLInputElement元素,具体网页代码如下:로그인통합계정게임계정原创 2016-11-18 20:37:57 · 611 阅读 · 0 评论 -
逆向调试雷电思路总结
<br />1.首先根据内存变化,能迅速找到飞机的生命,炸弹,分数,能够基本确认飞机结构。<br /> <br />2.找飞机位置有点困难,但可以查找飞机结构属性周围的内存变化找到飞机变化的坐标,这里有个小技巧,可以将内存十六进制显示换成十进制显示就非常好观察了。<br /> <br />3.位置变化会影响到渲染,所以在内存变化的地方下硬件访问断点,能够看到取得坐标内存时候的指令操作。<br />附:曾经在这里下硬件写入断点,发现不可行,因为这里在不停的刷新,随时在写入。<br /> <br />4.根据操原创 2010-12-11 19:06:00 · 844 阅读 · 0 评论 -
ODBG常用快捷键总结
Ctrl+N 输入表查看。一般在没加壳的程序中能够解析出来。实践过程中,可快速定位到一些常用API,然后将其作为突破口。Alt+M 内存查看。能快速定位不同模块的区段,能够设置某个模块的访问断点。Alt+Ctrl+G能直接跳转到某地址。Ctrl+B能查看设置的断点。W能查看窗口,并可设置消息断点。本人实践,感觉还是不好定位。K查看调用堆栈。E查看执行模块。原创 2010-11-25 10:06:00 · 901 阅读 · 0 评论 -
调试总结
1.调试程序之前不要放过每个细节,包括资源配置文件的所有东西都必须过一道两道或者三道,在这里发现的线索往往能让你调试事半功倍。2.解析收包发包是基础,往往能跟到比较有价值的线索。3.找结构体指针地址,想通过内存搜索来找,不可行。在堆栈空间往往会很多,一旦注入就会影响堆栈空间里面的值。只能一步一步的分析其来源,找到在其模块的正确偏移全局。4.关于不确定值的搜索,能通过减少或者增加来定位。原创 2011-06-12 01:32:00 · 506 阅读 · 0 评论 -
关于栈实践总结
今天发了个帖,问栈位于进程空间的哪个位置,居然很多人都不清楚。本人用OD看了下就一目了然进程结构示意图: 主线程堆栈 --临时变量都在里面主线程pe --GetModuleHandle(NULL)通过API得到的进程首地址在这个位置,全局变量为GetModuleHandle(NULL)+offset.textbss 代码数据 .text.rdat原创 2011-06-14 00:39:00 · 782 阅读 · 0 评论 -
通过VirtualQuery获取当前模块的句柄
HMODULE ModuleFromAddress( PVOID pv ){ MEMORY_BASIC_INFORMATION mbi; if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0) { return (HMO原创 2011-07-06 09:44:47 · 3641 阅读 · 1 评论 -
去除ring3层的Debug标志
_asm { mov eax, fs:[0x18] mov eax, [eax+0x30] mov dword ptr ds:[eax],0 }原创 2011-07-13 09:36:53 · 520 阅读 · 0 评论 -
逆向调试完成端口回包实践总结
大概描述下完成端口的原理 一个套接字可以对应多个overlapped, 每个overlapped都由相应的一个线程来处理。而WSARecv绑定好了一个OVERLAPPED,WSARecv的调用会通知数据即将到来,同时将会触发某线程中的GetQueuedCompletionStatus函数调用完成,然后通过第四个参数OVERLAPPED的某个偏移得到回包j然后进行后续操作。相应的WSAS原创 2012-03-13 16:53:05 · 1436 阅读 · 0 评论 -
静态添加DLL
LordPE 这个工具能够直接静态添加DLL,这下更方便了具体步骤:1. 点击PE编辑器,打开要添加的exe2. 进入目录表,选择输入表一项,点击省略号3..进入添加DLL界面。选择要添加的DLL。dll必须有一个导出函数添加即可,最后保存原创 2013-04-02 11:37:09 · 799 阅读 · 0 评论 -
注入小记
DetourCreateProcessWithDll(NULL, (LPWSTR)cmdLine.c_str(), NULL, NULL, FALSE, 0, NULL, (LPCTSTR)gamePath.c_str(), &si, &pi,(LPCTSTR)botPath.c_str(), NULL);+botPath "e:\tiaoshi\TTTTT\hero\src\debug\Im原创 2013-04-03 01:19:22 · 741 阅读 · 0 评论 -
模拟网页行为之工具篇
模拟网页行为最常见的包含模拟网页登陆,模拟提交表单,甚至可以拒绝网页第三方安全软件的加载等一些更酷的行为,这种行为不仅仅是减少了一些非常枯燥重复的过程,更重要的是提升了商业行为中的效率,甚至会给你直接带来金钱。再说这技术能应用的领域,好的可在电商,票务等方面,坏的譬如抢月饼,恶意注册账号等方面。技术在手,一念成魔一念成佛,修行在自己。如何入手模拟网页呢,有句话说得好,工欲善其事必先利其原创 2016-11-14 12:18:19 · 1111 阅读 · 0 评论 -
模拟网页行为之工具篇二
先说360浏览器,打开开发者选项,可以看到有个, 这个图片的第一个图标点中过后,再去选中网页你感兴趣的部分就可以跳转到你感兴趣的代码。也可以直接ctrl+F2搜寻你感兴趣网页元素和脚本函数。图片的第二个图标,选中后可以看到网页加载的收发包过程,原创 2016-11-14 21:14:36 · 632 阅读 · 0 评论 -
模拟网页行为之实践篇
无论是模拟网页点击还是直接协议发包,都有其适用的环境。不同的需求选择不同的方案。如果只是简单的获取类似网页IP地址的需求,实际上协议发包是最简单的。但如果是用户名网页登陆等稍微复杂的登陆要求,则直接填写表单,并获取按钮元素来模拟点击这个方案来讲相对简单。但需求若稍微再变化一点,要求效率多线程,这个时候又是协议发包会作为首选,哪怕需要用户名网页登陆。没有最好的方案只有更合适的方案。这点很重要。原创 2016-11-18 19:10:16 · 771 阅读 · 0 评论 -
mdb access2000 中文密码破解
access数据库破解工具很多,密码能不用费多大功夫就能破解出来,但是对于包含特殊字符包括中文字符的密码,就算破解出来后想通过数据库工具查看,复制粘贴到密码输入框实际都起不了作用,如下图: 通过写脚本来ADODB连接输入特殊字符,然后修改密码,能解决此类问题:Set args = WScript.Argumentsif args.count<>1 then ...原创 2018-05-06 21:57:31 · 5933 阅读 · 0 评论