一句话:
extern "C" IMAGE_DOS_HEADER __ImageBase;
这两天读msvcrt源码所得,以后dll获取自身的hmodule再也不用VitualQuery了
extern "C" IMAGE_DOS_HEADER __ImageBase;
这两天读msvcrt源码所得,以后dll获取自身的hmodule再也不用VitualQuery了
if (_FPinit != NULL &&
_IsNonwritableInCurrentImage((PBYTE)&_FPinit)) { //这里代码具体记不清楚了,是调用了一个函数初始化浮点数运算相关环境 } |
BOOL __cdecl _IsNonwritableInCurrentImage(char *pTarget)
{
_IMAGE_SECTION_HEADER *pTargetSectoinHeader;
BOOL bResult = FALSE;
if ( _ValidateImageBase((char *)0x10000000)
&& (pTargetSectoinHeader =
_FindPESection((char *)0x10000000, (unsigned int)(pTarget - 0x10000000))) != 0 )
{
bResult = ~(pTargetSectoinHeader->Characteristics >> 31) & 1;
}
return bResult;
}
|
未分配的内存,本应为PE头
|
为DLL申请的内存
|
<form action="../down.php" method="post">
<input type="hidden" value="torrent" id="type" name="type" />
<input type="hidden" value="#######" id="id" name="id" />
<input type="hidden" value="#######" id="name" name="name" />
<input type="submit" value=" 下 载 / down " onclick="openpage()" class="round_box" id="down_btn" />
</form>
可以看到,这个下载按钮被点击时不但会提交表单开始下载文件,同时还会触发openpage函数。
这个函数定义如下:
function openpage() {
var rand=Math.floor(Math.random()*2+1);
switch(rand)
{
case 1:
window.open('http://??.?????.biz/','','scrollbars=1,resizable=1').blur();
break;
case 2:
window.open('http://??.?????.info/','','scrollbars=1,resizable=1').blur();
break;
default:
break;
}
window.focus();
}
这才是最蛋疼的!每下载一个种子文件都要经过如下操作:
1点击一下下载按钮
2关闭弹出来的网站主页
3下载文件
4关闭网页
如果只是一个种子还好,但是我每次可都是要下载大量种子的啊!折腾不起啊啊啊啊!
然后我就去下载了greasemonkey插件然后开始折腾用户js脚本……
话说firefox这一点就不如换芯之前的opera方便,opera原生支持User CSS和User JS!
解决弹窗的话很容易,只需要一句:
document.getElementById("down_btn").onclick = null;
好吧,即便如此还是太麻烦了……
毕竟有那么多种子等着我去下载学习呢,要是不用点击下载按钮就好了……
这也好说,这么一句就够了!
document.getElementsByTagName("form")[0].submit();
嗯……
这下好多了,尤其是我还在FireFox里设置了种子文件默认是保存操作,省得我一下一下点了。
不过好像还是有点不爽啊,既然都自动下载了,
那么下载了之后我又何必非要很傻逼的去手动关掉那些下载页!我想要它自动关掉!
于是就有了如下最终版代码:
// ==UserScript==
// @name AntiBTGCPop&AutoDownload
// @namespace wye-ANGER.blogspot.com
// @description AntiBTGCPop & AutoDownload
// @include http://www3.*domn.com/*/file.php/*.html
// @include http://www3.*down.info/*/file.php/*.html
// @include http://www3.*down.com/*/file.php/*.html
// @version 1
// @grant none
// ==/UserScript==
document.getElementsByTagName("form")[0].submit();
document.getElementsByTagName('html')[0].innerHTML
= document.getElementsByTagName('form')[0].outerHTML;
var http_request = new XMLHttpRequest();
document.getElementById("down_btn").onclick = null;
function onResponse()
{
if(http_request.readyState!=4) return;
if(http_request.status!=200)
{
alert("Problem retrieving XML data");
return;
}
//assume browser cached torrent
setTimeout("window.close()",1000);
}
var nameval = document.getElementById("name").value;
var idval = document.getElementById("id").value;
var arg="type=torrent" +"&name="+nameval+"&id="+idval;
http_request.onreadystatechange=onResponse;
http_request.open('POST',"../down.php", true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send(arg);
这个脚本需要配合两项FireFox来使用
1.about:config中的dom.allow_scripts_to_close_windows需要设置为true以允许js关闭窗口
2.火狐应设置自动保存种子文件而不询问(没试过,或许不这么设置也可以用)
使用这个脚本之后,只需要按住Ctrl点击下载页连接,下载页在后台打开后会自动开始下载,然后自动关闭下载页!
这下终于可以痛痛快快的进行文化交流了~
找脚本的同学看到这里就够了,如果对代码还有点兴趣可以继续看。
稍微解释一下上面的脚本吧。
一开始先对form进行submit()先通过能触发下载的正规渠道发出请求。
然后问题又来了,从浏览器发出请求到服务器完成响应的间隔时间是不可预测的!
如果窗口关早了,服务器还没来得及响应请求,那文件都没来得及开始下载。
对于BT工厂这样的文化交流网站更是如此!慢起来的时候那真是^$#&*@(&#$*@)&$*#@!
那么就需要简单的判断一下服务器是否已经响应了下载请求。
对此,我的解决方案是先调用submit()走正规途径提交表单。
然后通过XMLHttpRequest提交一个同样的表单。
这时假设这两次提交表单对应的HTTP请求被浏览器缓存优化,
认定多出来的一次请求不会造成太多的网络负担(本来一个种子文件也不会造成多少负担)。
假定等后提交的请求服务器完成全部响应时,前一个通过submit()发送的请求已经至少完成了初步的响应。
那么此时关闭窗口应该至少浏览器已经开始下载了。
至此,大功告成~