C#之反编译之路(二)

先阅读C#之反编译之路(一)可以增加文章连续性
阅读C#之反编译之路(一)

如何快速定位代码位置

用一个小小的例子举例,用户反馈新能源车牌号无法录入,燃油车牌正常,查看日志报如下错误
在这里插入图片描述
拿到关键字车牌号长度错误直接反编译代码
打开dnSpy.exe→加载项目→Ctrl+F打开搜索框→输入关键字
在这里插入图片描述
由于是逐个文件进行反编译的,所有它并不能全局搜索,所以右上角是红色,这时候我们从资源文件开始,按键盘的向下键逐个文件向下查找(特别是完全不了解项目结构,非自己维护的代码等,不错过任何一个文件)
在这里插入图片描述
查找到关键字后,红色会变为黑色
在这里插入图片描述
很明显,最初的车牌号都为7位,并没有新能源车辆(新能源车牌号长度为8位),所以开发者添加了7位数的长度限制,我们只需要去掉该代码即可
右击→编辑方法→删掉圈中部分→编译→文件→全部保存,重新启动发现问题已经解决
在这里插入图片描述

修改接口调用

老系统用户登录后,要调用第三方系统接口,通过接口的返回值,判断是否能够登录系统,以及弹框提示等
通过对项目结构的分析,找到了登录方法
在这里插入图片描述
右键→编辑方法,添加如下的http post请求代码

//新接口请求var request = (HttpWebRequest)WebRequest.Create("http://localhost:5184/getAuth");request.Method = "POST";request.ContentType = "application/json;charset=UTF-8";//ContentTypebyte[] byteData = Encoding.UTF8.GetBytes(jsonParam);int length = byteData.Length;request.ContentLength = length;Stream writer = request.GetRequestStream();writer.Write(byteData, 0, length);writer.Close();var response = (HttpWebResponse)request.GetResponse();var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();

在这里插入图片描述
这个时候代码会大量报错,因为我们并没有添加引用,你可以从其他项目(自己不报错的项目F12进去就能看到)或网上找到相关的代码命名空间(下图1),如果项目没有用到的依赖,则手动添加依赖,再引用,如下图(下图2)
图1

图2
添加如下引用之后,代码已经能够正常运行,并且我们打上了日志,还从日志文件中拿到了返回值

using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json;

在这里插入图片描述
在这里插入图片描述
接下来我们要通过返回值来判断是否终止用户操作,只有当isAuth为true时,用户能直接登录,否则,如果message有信息,则弹框提示用户
这里我们直接使用JObject来接收值,省去添加返回值类的操作

			if(string.IsNullOrEmpty(responseString)){JObject jobj = JObject.Parse(responseString);if (jobj.HasValues) {if ((int)jobj["code"] == 200 && jobj["data"] != null && jobj["data"]["isAuth"] != null && (bool)jobj["data"]["isAuth"] == true) {//鉴权通过this.SystemInit(loginResponse, loginRequest.Password, jumpTo);} else if ((int)jobj["code"] != 200 && jobj["msg"]!=null&&!string.IsNullOrEmpty(jobj["msg"].ToString())) { //弹框提醒Growl.WarningGlobal(jobj["msg"].ToString());}}}else{Growl.InfoGlobal("调用第三方鉴权接口失败!");}

添加引用

using Newtonsoft.Json.Linq;

最终代码如下

using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using Cloud.Data.IService;
using Cloud.Data.Model;
using Cloud.Helper;
using Cloud.Wpf.Common;
using Cloud.Wpf.Model;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using HandyControl.Controls;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Cloud.Wpf.ViewModel
{// Token: 0x02000025 RID: 37public partial class LoginViewModel : GalaSoft.MvvmLight.ViewModelBase{// Token: 0x06000118 RID: 280public void Login(Cloud.Data.Model.LoginRequest loginRequest, string jumpTo = null){this.dialogService.Waiting("登录中", true, "");Cloud.Data.Model.LoginResponse loginResponse = this.userService.Login(loginRequest).Check<Cloud.Data.Model.LoginResponse>();this.dialogService.WaitingClose();if (loginResponse != null){string jsonParam = JsonConvert.SerializeObject(new{userId = loginRequest.StationCode,//设备代码loginName = loginRequest.UserName//登录id});HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:5184/getAuth");httpWebRequest.Method = "POST";httpWebRequest.ContentType = "application/json;charset=UTF-8";byte[] byteData = Encoding.UTF8.GetBytes(jsonParam);int length = byteData.Length;httpWebRequest.ContentLength = (long)length;Stream requestStream = httpWebRequest.GetRequestStream();requestStream.Write(byteData, 0, length);requestStream.Close();string responseString = new StreamReader(((HttpWebResponse)httpWebRequest.GetResponse()).GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();Log.Info("第三方接口返回值:" + responseString);if(!string.IsNullOrEmpty(responseString)){JObject jobj = JObject.Parse(responseString);if (jobj.HasValues) {if ((int)jobj["code"] == 200 && jobj["data"] != null && jobj["data"]["isAuth"] != null && (bool)jobj["data"]["isAuth"] == true) {//鉴权通过this.SystemInit(loginResponse, loginRequest.Password, jumpTo);} else if ((int)jobj["code"] != 200 && jobj["msg"]!=null&&!string.IsNullOrEmpty(jobj["msg"].ToString())) { //弹框提醒Growl.FatalGlobal(jobj["msg"].ToString());}}}else{Growl.WarningGlobal("调用第三方鉴权接口失败!");}}}}
}

保存,再次启动程序,用户已经不能正常登录系统
在这里插入图片描述
接口返回值如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记16——操作系统

学习笔记系列开头惯例发布一些寻亲消息&#xff0c;感谢关注&#xff01; 链接&#xff1a;https://www.mca.gov.cn/lljz/indexdetail.html?idd0afa7f6f36946319a206d61937f9b63&type0&t10.11199120579373845 八股——操作系统一些基础知识整理 一个java程序对应一个…

极海APM32F003通过IEC 60730/60335功能安全认证,为产品安全保驾护航

近日&#xff0c;极海APM32F003系列工业级超值型MCU&#xff0c;已顺利通过IEC 60730/60335功能安全认证&#xff0c;并可提供符合CLASS B标准的功能安全设计套件&#xff0c;有助于客户减少认证时间与成本&#xff0c;快速推出稳定可靠的终端产品。 *VDE是德国的一个权威性电气…

Spring - 配置支持多数据源

目录 SpringBoot整合多数据源整合步骤具体整合步骤如下&#xff1a;1、在application.properties中配置出多个数据源2、在代码中创建出mapper目录&#xff0c;在mapper目录下创建出不同数据源的目录创建出目录MySQL数据源的MapperSQL Server数据源的Mapper 3、创建config packa…

Excel:通过excel将表数据批量转换成SQL语句

这里有一张表《student》&#xff0c;里面有10条测试数据&#xff0c;现在将这10条测试数据自动生成 insert语句&#xff0c;去数据库 批量执行 P.S. 主要用到excel表格中的 CONCATENATE函数&#xff0c;将单元格里面的内容填入到sql里面对应的位置 1. 先写好一条insert语句&a…

Vue使用printJS导出网页为pdf、printJS导出pdf

先放几个参考链接 感谢&#xff01; Vue使用PrintJS实现页面打印功能_vue print.js 设置打印pdf的大小-CSDN博客 前台导出pdf经验汇总 &#xff08;html2canvas.js和浏览器自带的打印功能-print.js&#xff09;以及后台一些导出pdf的方法_iqc后台管理系统怎么做到导出pdf-CSD…

使用fs.renameSync(oldPath,newPath)方法,报错Error: EPERM: operation not permitted

出错翻译&#xff1a;表示操作被拒绝&#xff0c;因为当前用户没有足够的权限执行该操作。这可能是由于文件或目录 的权限设置不正确或操作系统限制所致 出现错误场景&#xff1a;使用element-plus的Upload 上传功能&#xff1b;后端使用Nodejs提供的fs.renameSync(oldPath,ne…

可碧教你C++——位图

本章节是哈希的延申 可碧教你C——哈希http://t.csdnimg.cn/3R8TU 一文详解C——哈希 位图 位图是基于哈希表的原理产生的一种新的container——bitset 基于哈希映射的原理&#xff0c;我们在查找的时候&#xff0c;可以直接去定址到元素的具体位置&#xff0c;然后直接访问该…

OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions

从程序员到ai Expert 1 定义参数和函数2 第一轮chatgpt3 第一轮结果和function定义全部加入prompt再喂给chatgpt4 大结局7 参考资料 上一篇解决了调用一个函数的问题。这一篇扩展为调用3个。n个自行脑补。 1 定义参数和函数 #1.设定目标 import json import openai#1.定义para…

基于JavaWeb+BS架构+SpringBoot+Vue协同推荐的黔醉酒业白酒销售系统的设计和实现

基于JavaWebBS架构SpringBootVue基于协同推荐的黔醉酒业白酒销售系统系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1.2 国内外研究概况 2 1.3 研究的内容 2 1.4 本章…

mybatisPlus 将List<String>字段转成json字符串,使用JacksonTypeHandler以及自定义类型处理器实现

文章目录 场景使用JacksonTypeHandler实现类型转换自定义StringListTypeHandler处理器实现 场景 项目中经常需要将List转成json存储到配置文件中, mybatisPlus默认实现了JacksonTypeHandler&#xff0c;GsonTypeHandler&#xff0c;FastjsonTypeHandler&#xff0c;也可以自定义…

JAVA基础语句1

目录 前言 一.JAVA特性 简单 面向对象 分布式 多线程 二.关键字 三.对象和类 对象 类 构造方法 创建对象 访问实例变量和方法 源文件声明规则 Java 包 import 语句 总结 前言 这里参考了&#xff1a;Java 教程 | 菜鸟教程 (runoob.com) 第一个必须是&#xff1a; hello world&a…

Github 2024-01-09Python开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-09统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目10Jupyter Notebook项目1 Payloads All The Things - 有用的Web应用程序安全负载和绕过列表 创建…

带前后端H5即时通讯聊天系统源码

带有前后端的H5即时通讯聊天系统源码。该源码是一个开源的即时通信demo&#xff0c;需要前后端配合使用。它的主要目的是为了促进学习和交流&#xff0c;并为大家提供开发即时通讯功能的思路。尽管该源码提供了许多功能&#xff0c;但仍需要进行自行开发。该项目最初的开发初衷…

C#.Net学习笔记——CLR核心机制

一、CLR基本介绍 &#xff08;1&#xff09;C(Common) L&#xff08;Language&#xff09; R&#xff08;Runtime&#xff09; IL的运行环境 &#xff08;2&#xff09;从下图可以看到&#xff0c;我们的计算机会先把我们写的语言&#xff0c;编写成IL语言&#xff0c;再给计…

Gartner发布2024年SASE融合战略路线图

向云计算和远程工作的转变增加了 SASE 需求&#xff0c;以实现从任何设备的安全访问。安全和风险管理领导者必须将网络和安全融合到一两个明确合作的 SASE 供应商产品中&#xff0c;并淘汰遗留的边界系统。 主要发现 安全访问服务边缘 (SASE) 框架为混合劳动力以及设备、分支机…

java基础之HashMap练习题

应用了 外循环&#xff0c;自循环&#xff0c;Lambda表达式&#xff0c;keySet&#xff08;&#xff09;方法&#xff0c;values&#xff08;&#xff09;方法&#xff0c;Entry对象 &#xff0c;entrySet&#xff08;&#xff09;方法 Map集合框架 1:(Map)关于下列Map 接口中…

AI问答系统与对话机器人服务(一)

知识要点 微软认知服务中知识库服务的申请与搭建 如何用REST API访问知识库数据 微软认知服务中机器人服务的申请与搭建 如何无缝集成知识库服务与机器人服务 建立知识库 什么叫QnA Maker? 知识库&#xff0c;就是人们总结出的一些历史知识的集合&#xff0c;存储、索引…

Windows 双网卡链路聚合解决方案

Windows 双网卡链路聚合解决方案 链路聚合方案1&#xff1a;Metric介绍操作 方案2&#xff1a;NetSwitchTeam介绍操作 方案3&#xff1a;NIC介绍操作 方案4&#xff1a;Intel PROSet 链路聚合 指将多个物理端口汇聚在一起&#xff0c;形成一个逻辑端口&#xff0c;以实现出/入…

办公文档,私人专用

一、安装Minio 1.1、创建文件夹&#xff0c;并在指定文件夹中下载minio文件 cd /opt mkdir minio cd minio touch minio.log wget https://dl.minio.io/server/minio/release/linux-amd64/minio1.2、赋予minio文件执行权限 chmod 777 minio1.3、启动minio ./minio server /…

Python3+Selenium+Chrome实现自动填写WPS表单

引言 本文通过python3、第三方python库Selenium和谷歌浏览器Chrome&#xff0c;完成WPS表单的自动填写。 开发环境配置 python3的安装&#xff1a;略&#xff0c;网上都有教程。 Selenium的安装&#xff1a;在命令行输入pip3 install selenium并回车即可完成安装&#xff0c;如…