注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

调试js找出脚本变量读写的地方  

2014-08-18 10:13:03|  分类: 一些练习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

调试js找出脚本变量读写的地方
hcper @ 2014-8-16

WScript.echo("begin");
var k;
k=0x11223344;
WScript.echo(k);//这里时搜索初值
k+=0x44332211;
WScript.echo(k);//这里确认变量地址
k=0x31313131;//这里写入
k+=0x11111111;//这里读出及写入
WScript.echo(k);
WScript.echo("end");


弹出第二个消息框时,搜索赋值过的初始值,还好副本不多,不然麻烦了。
0:006> s -d 0 L?70000000 11223344
0013edc4  11223344 baadf00d 00000008 00184bb8
00184bc0  11223344 baadf00d abababab abababab
00488acc  11223344 baadf00d 00000010 baadf00d
0048a188  11223344 baadf00d 00150084 40000060

为了确认以上那个才是变量对应的内存地址,这里修改初始值,通过后面的消息框弹出的值对比确认。
0:006> ed 0013edc4 1
0:006> ed 00184bc0 2
0:006> ed 00488acc 3
0:006> ed 0048a188 4


通过后面第三个消息框显示的值发现增加了3,所以是上面搜索的第三个地址
0:003> ? 0n1144201748
Evaluate expression: 1144201748 = 44332214

下内存断点找出读写的代码地址
0:003> ba r4 00488acc ".echo =rw=;dd 00488acc l1;ub @eip l1;g"
0:003> g
=rw=
00488acc  31313131
jscript!CScriptRuntime::Run+0x20d5:
3e372bf1 894808          mov     dword ptr [eax+8],ecx 这里写入31313131
=rw=
00488acc  31313131
jscript!CScriptRuntime::Run+0x1fd6:
3e36b55e 8b5108          mov     edx,dword ptr [ecx+8] 这里读出31313131
=rw=
00488acc  42424242
jscript!CScriptRuntime::Run+0x20d5:
3e372bf1 894808          mov     dword ptr [eax+8],ecx 这里写入42424242

找到脚本整形变量读写地址后,做个调试脚本就可以很方便的调试了。
0:006> bu 3e372bf1 ".echo =write=;r;g"
0:006> bu 3e36b55e ".echo =read=;r;g"
0:006> bl
 0 e 3e372bf1     0001 (0001)  0:**** jscript!CScriptRuntime::Run+0x20d5 ".echo =write=;r;g"
 1 e 3e36b55e     0001 (0001)  0:**** jscript!CScriptRuntime::Run+0x1fd6 ".echo =read=;r;g"

=read=
eax=0048a180 ebx=0013f298 ecx=00488ac4 edx=baadf00d esi=0048a784 edi=0048aa4f
eip=3e36b55e esp=0013f108 ebp=0013f280 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
jscript!CScriptRuntime::Run+0x1fd6:
3e36b55e 8b5108          mov     edx,dword ptr [ecx+8] ds:0023:【00488acc】=31313131
=write=
eax=00488ac4 ebx=0013f298 ecx=42424242 edx=0048a180 esi=0048a170 edi=0048aa56
eip=3e372bf1 esp=0013f108 ebp=0013f280 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
jscript!CScriptRuntime::Run+0x20d5:
3e372bf1 894808          mov     dword ptr [eax+8],ecx ds:0023:【00488acc】=31313131

所以,以后就可以用整数读写地址下断点了(局部变量除外),这样就很容易找到脚本变量的地址。
其他类型变量的地址,可以通过赋值到整形变量,或者读取自整形变量,在整形变量读写的地方
就可以看到其他变量地址了。
或者也可以用这个结论找出其他类型的变量读写的地方。

  评论这张
 
阅读(81)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017