JS逆向——国税总局发票查验平台

国家税务总局全国增值税发票查验平台

https://inv-veri.chinatax.gov.cn/

最近朋友有个新需求,就是做一个发票校验的爬虫,由于这个网站有一些不是很友好的反爬,导致对新手的非常不友好~~~所以周六花了点时间康康了。 难度还行,通过分析是sojson的企业版本,有可能为最新版本的v6,也有可能是v5然后加了个webdriver的检测,因为需要收费才能用v6的加强版反无头浏览器了。所以不管他了,黑猫白猫都是

debugger

一开始就给了个见面礼。其实还行,过这个debugger的文章已经多到不能再多了,这里主要是分析流程所以略。。。

JS逆向——国税总局发票查验平台

过了debugger的检测之后就干干净净舒舒服服,妈妈也在不用担心我调试的时候被无情的打断了。

JS逆向——国税总局发票查验平台

js 加密版本判断

虽然sojson = ob混淆 + 自己写的代码 一般来说,ob混淆是不带debugger的,看了一下跟sojson贼像,那就是他了。看了没有那个sojson的广告,也就可以确定是定制版本了

JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台

这里提供一下sojsonv6反混淆的截图,同一个世界,同一个套路。。。

JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台

简单的js处理

四五月份学了点js的AST处理,然后简单那处理一下。

处理字符串被抽取作为方法的调用 && 处理抽取出来的运算符并删除

JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台

处理平坦化流程

JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台

然后用Charles替换上去即可,charles 的食用方法我之前有写过。。。因为我是扣那些代码我就反混淆那些,处理sojson都已经是轻车熟路了,直接嘀嘀嘀了。。。

JS逆向——国税总局发票查验平台

然后刷新一下,重复一遍过debuger的方法,然后在网络上下个断点,就能发现整个流程了。

初始化阶段

获取不同的省份查询的地址可能不一样

JS逆向——国税总局发票查验平台

通用流程

在这里加ajaxSetup,其实这个也是我在反推流程的时候无意发现的,然后就喜提url签名。。。

JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台

RSA

JSEncrypt

RSA 在js实现的公共库只有JSEncrypt和基于JSEncrypt二次开发的nodejs版本,暂未找到其他的比较有标准化的RSA。但是他们依赖于浏览器内部crypto或者就是nodejs实现的crypto。暂未找到一个未依赖系统的特定库的RSA实现,在Java的内置js引擎是无法正常运行的。所以走到这一步都是通过拿到这个值让Java实现Rsa加密。

Java 实现RSA算法

package cn.gov.chinatax.utils; import sun.misc.BASE64Decoder; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import java.io.IOException; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; /** * @Description * @auther Gouzai * @create 2020-06-05 18:44 */ public class RSA { public static String encryp(String str,String key) { try { X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(new BASE64Decoder().decodeBuffer(key)); // RSA对称加密算法 KeyFactory keyFactory = KeyFactory.getInstance(“RSA”); // 取公钥匙对象 PublicKey publicKey = keyFactory.generatePublic(bobPubKeySpec); Cipher cipher = Cipher.getInstance(“RSA”); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] bytes = cipher.doFinal(str.getBytes()); return Base64.getEncoder().encodeToString(bytes); } catch (IOException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } return null; } }

RSA KEY

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCXY6ndiMJE7wF0qg9emVQik7FnCBidCr8V+yG/++iN/CwV0Rfe81wnjg2I23nbLJVuT63Y1T4x2etNr58BTHuzrCRy8gj3HPaS0GSGuiN7EWI1s0Bg6N78nvStPxeinyD8Qh3Bqa+5Z014nbOqn20kW4d3efLAeI7A6yc2uMPvfwIDAQAB

获取验证码

他的获取验证码是绑定发票代码跟发票号码的

JS逆向——国税总局发票查验平台

解密验证码

JS逆向——国税总局发票查验平台

解密之后拿到base64的图片,查验时间,输入验证码的类型

JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台

验证码识别

验证码这里采用的是鱼导的定制识别方法,下面有测试接口。不过为了方便测试,所有每天会有上限为500次的识别机会,已经足够测试了。一张发票一天就只能查询五次。。。 由于验证码识别率超过98%,基本没有见到因为由于验证码错误导致的查询失败。 – 验证码识别实现方案

JS逆向——国税总局发票查验平台

获取发票信息

这里有个是fplx(发票类型),在全局搜索一下即可,跟获取服务器配置的js一样,在同一个文件中 先签名

JS逆向——国税总局发票查验平台

在组织拼接代码然后传进去

JS逆向——国税总局发票查验平台

临时存放起来

JS逆向——国税总局发票查验平台

动态生成拼接处理的js代码

JS逆向——国税总局发票查验平台

拿到初始化数据

JS逆向——国税总局发票查验平台

解析数据

JS逆向——国税总局发票查验平台

设置到文本中

JS逆向——国税总局发票查验平台

显示,完事了

JS逆向——国税总局发票查验平台

到这里就整个流程是已经走完了。简称一条龙服务。。。

效果

测试的两个分票类型:第一个是没有详情清单的(喜鹊楼茶餐厅)。第二个有详情清单(沃尔玛)

JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台
JS逆向——国税总局发票查验平台

彩蛋

这个网站主要是检测

sojson的套路,直接过了。。。

魔改了一些库,比如Base64,里面有几个base64,千万不能混淆了,混淆了就GG

检测window.navigator.webdriver

屏幕的可用宽高的乘积跟一个临界值做判断

扣代码技巧

逆着扣,哪里调用扣哪里,妈妈再也不用担心我了…..

java的String split跟js有差异化的。。。

JS逆向——国税总局发票查验平台

政府的程序员都那么无聊吗???全用数组,不打算更新了吗?。。。更新一个字段得全部流程都要改。。。 参数名称的命名方式竟然是中文拼音的第一个,比如pflx(发票类型),fpdm(发票代码),fphm(发票号码)。。。

Thanks

Walden陈可牛

QQ Group

JS逆向——国税总局发票查验平台

免责声明:文章内容来自互联网,本站仅提供信息存储空间服务,真实性请自行鉴别,本站不承担任何责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:JS逆向——国税总局发票查验平台 https://www.bxbdf.com/a/15468.shtml

上一篇 2023-04-27 00:57:31
下一篇 2023-04-27 00:59:55

猜你喜欢

联系我们

在线咨询: QQ交谈

邮件:362039258#qq.com(把#换成@)

工作时间:周一至周五,10:30-16:30,节假日休息。