Autojs 加密选择通过勾选 Autojs 加密选项,系统会自动配置适合 Autojs 加密的方案。
Autojs 加密主要调整内容
1、加密PX平坦系数的调整,更加适合 Autojs 语法,使得 Autojs 加密后脚本运行速度不会受到影响。
2、加密语法更兼容 Autojs 。
3、更加适合 Autojs 安全的加密算法。
4、 Autojs 不需要控制台输出和反调试,当选择 Autojs 的时候,会自动屏蔽 “禁用控制台调试” 和 “禁止控制台输出”。
Autojs 加密注意事项
由于平时和使用 Autojs 的同学接触较多,发现一个比较严重的问题。Autojs 的研发人员,对 Autojs 的语法、JavaScript 语法谨慎度、严谨度等都比较粗糙,导致代码加密后不能运行,针对这个问题,下面提几点,希望 Autojs 的研发人员,大神们注意了。
1、if、for、try...catch 等包含局部作用于的语法块的书写注意点。错误示范:
if(type == 1){
var mq = 'active';
}else if (type == 2){
var mq = 'selected';
}else{
var mq = 'checked';
}
//这里使用 mq
console.log(mq);
上面的代码,在正常的业务中使用一般不会出现问题,原因是 autojs 是基于 JavaScript ,由于 JavaScript 是弱语言,导致语法可以不用那么严谨。但是一旦加密的时候,由于 if 语句块里面保安的 mq 都是局部变量,这会有可能使加密程序会以为这 4个 mq 毫无关系。
正确示范:
var mq = 'checked';
if(type == 1){
mq = 'active';
}else if (type == 2){
mq = 'selected';
}
//这里使用 mq
console.log(mq);
上面的代码,先是定义一个变量“mq”,然后给一个默认值,如果业务中没有默认值,就给一个空串,或者就不给默认值,然后依次判断条件,然后给出相应的值,这样书写,更加严谨,代码容错率好。加密起来也不会出问题。
其他说明:
包括 “for” 循环中,写了局部变量,然后在 for 的外面去使用,这也是同理的道理。
包括try...catch 中,写了局部变量,然后在外面去使用,这也是同理的道理。
不要觉得这些无所谓,其实不管您是为了最后加密,还是平时书写,我们应该能注意的就要注意到,能讲究的就要讲究,这样写出来的代码会更优秀,容错率高,不会说运行着突然出一些莫名其妙的问题。
2、方法名变量名放到字符串里,或者数组里等问题说明。
错误示范:
function demo() {
alert('jsjiami.com');
}
setInterval("demo()",1000);
上面的代码,定义了一个方法名为“demo”,在一个定时任务中去1000毫秒(1秒),去执行demo方法。但是一旦加密后,有可能方法名demo 被脱敏了,变成了 “_0xkjda”类似这样了,而下面的字符串 “demo()”是没有任何变化的,导致找不到demo方法—demo is not defined。
正确示范:
function demo() {
alert('jsjiami.com');
}
setInterval(demo,1000);
这样的话,加密程序能知道 setInterval中的 demo指向上面的方法,加密后修改了方法变量名后,会同时修改2处,这样就不会造成找不到方法。
其他说明:
这样的案例我看到N次,有的人是把方法放入数组中,或者去拼接字符串,然后去 eval 执行,都是同样的道理,因为字符串在没有运行的时候,我们的加密工具是无法识别是否有关联。所以别用方法名、变量名以字符串方式去传递。
3、UI代码,也是最重要的问题。
最好的方式是把 ui 代码修改一下。
原来代码:
ui.layout(
<drawer id="drawer">
<vertical>
<appbar bg="#ff0000">
<toolbar id="toolbar" title="演示代码"/>
<tabs id="tabs"/>
</appbar>
<viewpager id="viewpager">
<frame>
<vertical gravity="top">
<text text="演示代码" margin="10" textColor="black" textSize="16sp"/>
</vertical>
</frame>
<frame layout_weight="1">
<webview id="webview" w="*" h="*"/>
</frame>
</viewpager>
</vertical>
</drawer>
);
修改后代码:
var demo = '<drawer id="drawer">\
<vertical>\
<appbar bg="#ff0000">\
<toolbar id="toolbar" title="演示代码"/>\
<tabs id="tabs"/>\
</appbar>\
<viewpager id="viewpager">\
<frame>\
<vertical gravity="top">\
<text text="演示代码" margin="10" textColor="black" textSize="16sp"/>\
</vertical>\
</frame>\
<frame layout_weight="1">\
<webview id="webview" w="*" h="*"/>\
</frame>\
</viewpager>\
</vertical>\
</drawer>'
ui.layout(demo);
这也就能在使用“ https://www.jsjiami.com 加密”了
我们在 Autojs 放入了ui; 代码就是ui.layout() 包含的代码,这种代码因为是ui,其实没必要加密,如果您就是想加密,先用 : JS/HTML混合加密【记得选纯JS加密】。
然后放到 JS 文件中,可以一起用最牛加密 https://www.jsjiami.com 加密,这样会效果好点。