首页
社区
课程
招聘
[原创]第三题 寻踪觅源
发表于: 2020-4-18 20:10 4376

[原创]第三题 寻踪觅源

2020-4-18 20:10
4376
本题用quickjs实现校验逻辑
解体思路
1. 在0x45781B _JS_NewAtomStr处下断,可以获得一些JS变量的信息
0x171 un
0x172 sn
0x173 s
0x174 i
0x175 j
0x176 k
0x177 l
0x178 m
0x179 n
0x17a 5ADACAEBF4B4A8A4
0x17b 31430057b0557020141973402736****
0x123 charCodeAt
0x121 fromCharCode
0x16f print 这个是Console.log
0x171 un
0x172 sn
0x173 s
0x174 i
0x175 j
0x176 k
0x177 l
0x178 m
0x179 n
0x17a 5ADACAEBF4B4A8A4
0x17b 31430057b0557020141973402736****
0x123 charCodeAt
0x121 fromCharCode
0x16f print 这个是Console.log
0x04 OP_push_atom_value
0x06 OP_undefine
0x0E OP_drop JS_FreeValue(ctx, sp[-1]);
0x11 OP_dup
0x24 op_call_method 2 
0x39 OP_get_var
0x3A OP_put_var
0x3F OP_define_var
0x40 OP_check_define_var
0x43 OP_get_field2
0x93 OP_post_inc +1
0x9C OP_mul
0x9E OP_mod
0x9F OP_add
0xA5 OP_CMP(OP_lt, <, js_relational_slow(ctx, sp, opcode));
0xA6 OP_CMP(OP_lte, <=, js_relational_slow(ctx, sp, opcode));
0xA7 OP_CMP(OP_gt, >, js_relational_slow(ctx, sp, opcode));
0xA8 OP_CMP(OP_gte, >=, js_relational_slow(ctx, sp, opcode));
0xA9 OP_CMP(OP_eq, ==, js_eq_slow(ctx, sp, 0));
0xAA OP_CMP(OP_neq, !=, js_eq_slow(ctx, sp, 1));
0xAB OP_CMP(OP_strict_eq, ==, js_strict_eq_slow(ctx, sp, 0));
0xAC OP_CMP(OP_strict_neq
0xB0 OP_xor
0xB7 OP_push_0
0xBF OP_push_i8
0xC1 op_push_?
0xCB OP_put_loc0? set_value(ctx, &var_buf[0], *--sp)
0xEE OP_goto8
0xEB OP_get_length
0xEC goto_if_false
0xF1 OP_call1
3. 在0x4017D5处下断,ebx指向bytecode,对bytecode进行分析,大概逻辑如下:
0x04 OP_push_atom_value
0x06 OP_undefine
0x0E OP_drop JS_FreeValue(ctx, sp[-1]);
0x11 OP_dup
0x24 op_call_method 2 
0x39 OP_get_var
0x3A OP_put_var
0x3F OP_define_var
0x40 OP_check_define_var
0x43 OP_get_field2
0x93 OP_post_inc +1
0x9C OP_mul
0x9E OP_mod
0x9F OP_add
0xA5 OP_CMP(OP_lt, <, js_relational_slow(ctx, sp, opcode));
0xA6 OP_CMP(OP_lte, <=, js_relational_slow(ctx, sp, opcode));
0xA7 OP_CMP(OP_gt, >, js_relational_slow(ctx, sp, opcode));
0xA8 OP_CMP(OP_gte, >=, js_relational_slow(ctx, sp, opcode));
0xA9 OP_CMP(OP_eq, ==, js_eq_slow(ctx, sp, 0));
0xAA OP_CMP(OP_neq, !=, js_eq_slow(ctx, sp, 1));
0xAB OP_CMP(OP_strict_eq, ==, js_strict_eq_slow(ctx, sp, 0));
0xAC OP_CMP(OP_strict_neq
0xB0 OP_xor
0xB7 OP_push_0
0xBF OP_push_i8
0xC1 op_push_?
0xCB OP_put_loc0? set_value(ctx, &var_buf[0], *--sp)
0xEE OP_goto8
0xEB OP_get_length
0xEC goto_if_false
0xF1 OP_call1
0x04 OP_push_atom_value
0x06 OP_undefine
0x0E OP_drop JS_FreeValue(ctx, sp[-1]);
0x11 OP_dup
0x24 op_call_method 2 
0x39 OP_get_var
0x3A OP_put_var
0x3F OP_define_var
0x40 OP_check_define_var
0x43 OP_get_field2
0x93 OP_post_inc +1

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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