免责声明:本文旨在学习交流,严禁用于非法用途。如侵犯您的合法权益,还请告知删除,谢谢。
先上一段JavaScript代码:
String["prototype"]["unsbox"] = function() {
var _0x4b082b = [15, 35, 29, 24, 33, 16, 1, 38, 10, 9, 19, 31, 40, 27, 22, 23, 25, 13, 6, 11, 39, 18, 20, 8, 14, 21, 32, 26, 2, 30, 7, 4, 17, 5, 3, 28, 34, 37, 12, 36];
var _0x4da0dc = [];
var _0x12605e = '';
for (var _0x20a7bf = 0; _0x20a7bf < this["length"]; _0x20a7bf++) {
var _0x385ee3 = this[_0x20a7bf];
for (var _0x217721 = 0; _0x217721 < _0x4b082b["length"]; _0x217721++) {
if (_0x4b082b[_0x217721] == _0x20a7bf + 1) {
_0x4da0dc[_0x217721] = _0x385ee3;
}
}
}
_0x12605e = _0x4da0dc["join"]('');
return _0x12605e;
}
这段代码是给 String类添加一个 unsbox 方法,代码中的this 代表 String类实例,已知String类实例定义如下:
var arg1 = "73BDCDA6CC766F44B9ADC7AE81ECD668B194C94D";
那么调用该 unsbox 方法的结果是:
下面就来讲这段代码改写为Python代码,如果你会改写,则下面的内容不需要看了。
下面逐步来分解这个String类的新方法:
String["prototype"]["unsbox"] = function() {
....
}
在改写时,直接定义成函数,将实例通过参数传递进来就可以了:
def unsbox(strTmp):
pass
再来看函数体,先是变量定义,直接照抄即可:
def unsbox(strTmp):
_0x4b082b = [15, 35, 29, 24, 33, 16, 1, 38, 10, 9, 19, 31, 40, 27, 22, 23, 25, 13, 6, 11, 39, 18, 20, 8, 14, 21, 32, 26, 2, 30, 7, 4, 17, 5, 3, 28, 34, 37, 12, 36]
_0x4da0dc = []
_0x12605e = ''
再就是这么一个函数体:
for (var _0x20a7bf = 0; _0x20a7bf < this["length"]; _0x20a7bf++) {
var _0x385ee3 = this[_0x20a7bf];
for (var _0x217721 = 0; _0x217721 < _0x4b082b["length"]; _0x217721++) {
if (_0x4b082b[_0x217721] == _0x20a7bf + 1) {
_0x4da0dc[_0x217721] = _0x385ee3;
}
}
}
按照它的规则老老实实进行改写:
def unsbox(strTmp):
_0x4b082b = [15, 35, 29, 24, 33, 16, 1, 38, 10, 9, 19, 31, 40, 27, 22, 23, 25, 13, 6, 11, 39, 18, 20, 8, 14, 21, 32, 26, 2, 30, 7, 4, 17, 5, 3, 28, 34, 37, 12, 36]
_0x4da0dc = []
_0x12605e = ''
for i in range(len(strTmp)):
_0x385ee3 = strTmp[i]
for j in range(len(_0x4b082b)):
if (_0x4b082b[j] == i+1):
_0x4da0dc[j] = _0x385ee3
依葫芦画瓢,改写成了这样,但是,这段代码运行会报错,因为还没有给 list类型的变量 _0x4da0dc 分配空间,直接赋值肯定是要报错的,在JS中运行没问题,但是Python不行。那能不能 用append 方法呢? 也是不行的,因为这里的并不是从前往后append,逻辑不对。
既然没有分配空间,那就提前分配空间呗!
可以看到,它第二个for循环遍历的长度 是 _0x4b082b 的长度,因此可以尝试先分配 _0x4b082b 的长度的空间,考虑到后面有个join操作,先初始化为 空字符,代码修改如下:
def unsbox(strTmp):
_0x4b082b = [15, 35, 29, 24, 33, 16, 1, 38, 10, 9, 19, 31, 40, 27, 22, 23, 25, 13, 6, 11, 39, 18, 20, 8, 14, 21, 32, 26, 2, 30, 7, 4, 17, 5, 3, 28, 34, 37, 12, 36]
_0x4da0dc = [''] * len(_0x4b082b)
_0x12605e = ''
for i in range(len(strTmp)):
_0x385ee3 = strTmp[i]
for j in range(len(_0x4b082b)):
if (_0x4b082b[j] == i+1):
_0x4da0dc[j] = _0x385ee3
再就是后面的join操作和返回了,同样加入到代码中:
def unsbox(strTmp):
_0x4b082b = [15, 35, 29, 24, 33, 16, 1, 38, 10, 9, 19, 31, 40, 27, 22, 23, 25, 13, 6, 11, 39, 18, 20, 8, 14, 21, 32, 26, 2, 30, 7, 4, 17, 5, 3, 28, 34, 37, 12, 36]
_0x4da0dc = [''] * len(_0x4b082b)
_0x12605e = ''
for i in range(len(strTmp)):
_0x385ee3 = strTmp[i]
for j in range(len(_0x4b082b)):
if (_0x4b082b[j] == i+1):
_0x4da0dc[j] = _0x385ee3
_0x12605e = ''.join(_0x4da0dc)
return _0x12605e
至此,代码修改完成,请读者自行验证代码的准确性。
这段代码还可以进行优化改写,使之更优雅,我就不炫技了。
今天的文章js逆向代码是什么意思_javascript调用python脚本分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68440.html