21

某含AI的五子棋

陆陆续续写了一段时间的东西,虽然说是AI。。但实际上很挫。。稍微认真很容易赢

原理就是深度优先搜索估权。计算机落子时通过演算后面的几步,得到一个当前棋盘上权值最高的点落子。(并不一定是最优)

仍有很多问题:
 1.死连珠判断不严谨
 2.效率低(优化不好)
 3.权值估算很糟糕
 4.游戏模式局限性大(玩家只能执白棋)
 5.计算机思考不能终止(不过AI_LEVEL要是<=2的时候速度还是可以接受的,默认为2)
最近又开始搞别的了,所以暂时不会再改了。。代码贴出来各位可以参考一下

图形部分采用了炮姐的EGE图形库,完全满足了需要。不过我用的很糟糕(main函数XD)
要编译的话当然要装EGE咯,EGE库我已经放到代码包里了
最新版EGE请去这里下载:http://code.google.com/p/misaka/downloads/detail?name=ege20110724.7z
只想随便看看代码的话可以在线浏览:
CFive.cpp – http://codepad.org/385VhbJt
Game.cpp – http://codepad.org/V2z1QuoP
AI.cpp – http://codepad.org/WGeiZWKg
misc.h – http://codepad.org/oyX5iech

另外很多地方我#include <windows.h>来着。。其实只是为了malloc。。#include <malloc.h>就行了。。
代码依然不是很美,依然不满意,欢迎非喷性批评
–I'm getting bett

[……]阅读全文

21

Firebug使用心得

写网络程序的时候抓包是必要的,不过一直没找到一款得心应手的抓包工具,后来发现了Firebug这货,一切问题都不是问题了!不管你信不信,我反正是信了。

简介

Firebug是Firefox的一个插件,用来调试网页的(其它浏览器也有类似工具,没用过就不介绍了)。什么HTML分析、脚本分析、抓包都可以用Firebug搞定,而且效果相当好~

 

安装的话直接在Firefox扩展里搜索Firebug然后下载安装即可,装好后重启一下浏览器,然后右下角就会出现一个臭虫的图标,点击一下就可以开始使用了。

 

HTML分析,点击+号能展开,右上角可以搜索关键词,支持编辑,非常好用~

 

点击网络标签,刷新一下页面,就可以看到抓包得到的数据,GET/POST什么的都有~

 

点击+号展开之后非常详细~

 

小技巧:修改HTML代码提升百度贴吧小吧主权限

百度贴吧小吧主要是封别人ID的话只能封1天,但是我们使用Firebug修改HTML的话就可以实现像大吧主一样封10天,只是一个简单的例子,来演示一下这个插件的强大之处~

先打开贴吧,找个帖子,对着“封”按钮点击右键选择“查看元素”:


 

然后就跳到了对应的代码处:


 

<a target="_blank" href="#" onclick="pb_filter_user.get_ip_tbs(&#3

[……]阅读全文

21

检测内核回调表钩子

    KernelCallbackTable,就是apfn hook检测,看XT有这个功能,网上也没找到相关内容,就自己实现了一下,纯VB,其实就是特征码暴力搜索+PE文件解析,没什么新颖的,XP SP3测试成功,其它系统未测,估计也差不多~

    代码注释不多,结构规范,下载地址:http://win32-fake-program.googlecode.com/files/DetectKernelCallbackTableHook.rar

    来晒张图~

 

[……]阅读全文

21

关于LdrLoadDll

调用过程:LoadLibraryA->LoadLibraryW->LdrLoadDll……

针对有些未加载kernel32.dll的进程,可以用ShellCode+LdrLoadDll进行DLL注入

还有就是可以用LdrGetProcedureAddress代替GetProcAddress

使用方法:

Private Declare Function LdrLoadDll Lib "NTDLL.DLL" (PathToFile As String, ByVal Flags As Long, ModuleFileName As UNICODE_STRING, ModuleHandle As Long) As Long

Private Type UNICODE_STRING
    Length As Integer
    MaximumLength As Integer
    Buffer As Long
End Type

Private Sub xx()

    Dim uPath As UNICODE_STRING
    Dim hModule As Long
  
    uPath.Buffer = StrPtr(dllPath)
 &nbsp

[……]阅读全文

21

也许还有一种DLL注入方法

只是瞎想的,未尝试,未必可行,无码

说一下步骤:

1.获取本进程的kernel32.dll基址,获取LoadLibraryA函数地址,后者与前者相减计算出LoadLibraryA在kernel32里的偏移位置(也可以直接使用获取到的LoadLibraryA函数地址,但是不保证所有系统兼容)

2.获取目标进程的kernel32.dll基址,加上之前所得的偏移计算出目标进程内LoadLibraryA函数地址

3.构造一段ShellCode写入目标进程,ShellCode恢复GetMessage的InlineHook,接着push DLL(push的是内存地址,之前要将DLL路径写入到目标进程),然后call LoadLibraryA(注意是偏移),然后再call一次GetMessage

4.Inline Hook目标进程的GetMessage(会频繁调用,前提是有窗口的程序),jmp到ShellCode的位置

5.ShellCode被执行,DLL成功注入

 

该方法无需CreateRemoteThread、SetWindowsHookEx,如果可行的话应该可以bypass各个杀软。

 

缺点应该有不少,比如线程同步问题,还有就是只支持GUI程序。水平太菜,有问题的地方希望各位大牛指正。

 

[……]阅读全文

21

获取进程路径的种种方法

RT。在网上搜集了一下,整理了如下几种方法。

1.PEB->ProcessParameters->ImagePathName
2.EPROCESS->SeAuditProcessCreationInfo->ImageFileName->Name
3.EPROCESS->SectionObject->SegmentObject->ControlArea->FileObject->FileName
4.ZwQueryInformationProcess-PEB,RtlVolumeDeviceToDosName(这个没看明白)

理论上讲都可以伪装……

BTW:推荐一个好网站http://msdn.moonsols.com/,各个系统的各个结构都可以在上面查到,很好很强大。

 

[……]阅读全文

21

远程执行多参函数

2011-6-8注:

原地址失效了,考虑到还有很多人问我要,更正一个新的下载地址:
http://naylon.0ginr.com/download/OldFxExecuteRemoteFunction_Demo.rar
以前比较水,就写了这么一个东西,实际上缺陷十分多,很多东西都没考虑,不推荐应用到实际开发中。

 

    RT,昨天写的,今天整理成了模块,虽说这东西技术不是很高明,但有的时候还是蛮有用的。

    具体功能看Demo,不解释,高手bypass。

    Demo下载地址:ftp://58.185.67.6/download/naylon/FxExecuteRemoteFunction_Demo.rar

    顺便贴关键代码(modFxExecuteRemoteFunction.bas):

Option Explicit

Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "

[……]阅读全文

21

获取线程函数的所在模块

XueTr和天琊的“察看线程”里都能看到线程所属的模块,但是自己却一直想不出来如何实现。苦恼了很久,后来参考了倒霉蛋儿的一篇文章,使用的GetMappedFileNameA来实现的上述功能,但是我试了半天总是出错,vb6.exe直接挂掉了,于是只能放弃GetMappedFileNameA,后来我就想,有的线程函数一定是在模块里的,那么线程函数的地址一定大于模块的基址,小于(模块的基址+模块的大小),正好倒霉蛋儿的代码里有获取线程入口地址的方法,于是就有了办法,遍历模块,然后一个个进行上述判断,如果匹配就记录下该模块。

为了图方便,我使用了Tesla.Angela的HdEnumModules(因为LdrModule结构里的模块信息比较详细),写了个easy的函数获取线程所属模块,一共有三个参数,第一个是线程所属进程的句柄,第二个是线程句柄,第三个是线程线程入口函数的地址(传0自动获取),函数代码如下,各种声明就不贴了。。

Public Function FxGetThreadModuleFileName(ByVal hProcess As Long, ByVal hThread As Long, Optional ByVal StartAddr As Long = 0) As String
    Dim lPtr As Long
    Dim pbi As PROCESS_BASIC_INFORMATION
    Dim tPEB_LDR_DATA As PEB_LDR_DATA
   &nb

[……]阅读全文

23

百度贴吧帖子图片下载器

偶然看到这个贴,很喜欢lz发的图、、但是实在太多了,一张张右键保存相当麻烦,于是创造了本程序。

功能很简单:自动抓取所有页面,批量下载一个帖子里包含的所有图片。

缺点是只支持http://tieba.baidu.com/f?kz=xxxxxxxx这种形式的帖子,不支持http://tieba.baidu.com/p/xxxxxxxx这种形式,其实都没啥区别,直接把后者的xxxxxxxx移到前者后面就行了。这是细节问题、懒了就没改。偶尔下载会掺杂进来几张杂图(表情什么的),这个影响也不大,删掉即可。

写这个正好练习一下正则表达式~果然比InStr+Mid好用多了,感谢sunshinebean提供的帮助。同时也感谢吧友幽柔雅帮忙测试。

另外这个代码真的写的很挫~大部分都写在了一个Click Sub里,有需要的童鞋就抠着看看吧~

可执行文件+源代码下载地址:http://naylon.0ginr.com/download/PictureDownloader.rar

[……]阅读全文

19

化学方程式配平

最近学了点数学知识,况且考虑到算法一直是自己的弱项,就写了这个来练习一下……(同时也是受到了XiaoJ的启发)

 源代码下载地址:http://naylon.0ginr.com/download/ChemicalEquation.rar

 

Before:

上百度百科查了一下,化学方程式配平大概有以下几种方法:

1-最小公倍数法

2-观察法

3-奇偶配平法

4-待定系数法

5-化合价法

 

大概看了看,如果要让计算机求解,4自是最好的选择,可以编写算法,于是选4下手。

 

PART0:Example

先举个配平的例子,就用H2+O2=H2O吧,比较简单:

 

先设系数分别为X0, X1, X2,得

X0 H2 + X1 O2 = X2 H2O

 

于是可得方程组

2X0 = 2X2

2X1 = X2

 

显然,这样的方程组难以求解,于是设系数X0为1,可得

-2X2 = -2

2X1 – X2 = 0

 

这样就把配平的问题转化成了解n元线性方程组的问题,接下来就是直观的问题了:如何解?考虑到不同的方程式可能有n个未知数,所以要找一种通用的解n元线性方程组的方法。于是我使用了矩阵行列式的方法(关于行列式的具体内容可以参考附带的ppt,内容较多,不再阐述)。

 

接上

[……]阅读全文

旧文章 «

» 新文章