首页
社区
课程
招聘
未解决 [分享]回答12年自己的提问,关于脚本变量内存地址一事 10雪币
发表于: 6天前 75

未解决 [分享]回答12年自己的提问,关于脚本变量内存地址一事 10雪币

6天前
75

就是提问:求找脚本变量地址的调试方法

方法就是搜索特殊值,比如0x11223344这样比较容易识别的数值。

然后改写数值通过弹出窗口确认地址。弹出主要是为了让脚本暂停。

=========================================

调试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

所以,以后就可以用整数读写地址下断点了(局部变量除外),这样就很容易找到脚本变量的地址。

其他类型变量的地址,可以通过赋值到整形变量,或者读取自整形变量,在整形变量读写的地方

就可以看到其他变量地址了。

或者也可以用这个结论找出其他类型的变量读写的地方。



[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回