记录一次通过反编译处理线上问题

问题: 研发公司单独做了控制关停接口,因为他们域名未备案缘故导致接口无法正常调用,游戏不能正常登陆。
但是对方因为合作终止暂时不能积极的处理。
只能自己尝试编译处理

解决办法:找对对应的接口文件,尝试重新编译解决

1、一开始不知道游戏里为什么卡在登陆上,尝试抓包看信息
手机登陆通过fiddler抓包工具在,可以看到一个登陆链接报错500
------->问题引起的原因是用户验证登陆返回500,由于调用SDK不能请求到接口返回,这个SDK被研发那边私自接了控制SDK的代码。
http://www.test.com:10011/test/user.jsp?parm=%7B%22ppid%22:%22B4B42E782BD7234F%22,%22serverid%22:11,%22ver%22:%221.0.093%22,%22type%22:%22withid%22,%22zip%22:1,%22md5%22:%223868%22%7D

2、服务器上用tcpdump查看访问地址:
查看GET方式访问地址:
tcpdump -s 0 -A ‘tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420‘

查看到一个日志:19:17:46.139319 IP 10-35-56-221.39446 > 121.40.68.207.http: Flags [P.], seq 2665129300:2665129528, ack 2447934587, win 221, options [nop,nop,TS val 2436854501 ecr 3091776060], length 228br/>[email protected]@.a.
#8.y(D....P...T...{...........
.?r..H.<GET /test/switch.php HTTP/1.1
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.8.0_171
Host: www.a.com
Accept: text/html, image/gif, image/jpeg, ; q=.2, /*; q=.2
Connection: keep-alive

观察到日志是一个去访问了 http://www.a.com/a/switch.php

3、去服务器上查看上链接关键字哪里使用到
[[email protected] s1_bak20190921]# grep -rn ‘www.a.com‘ *
Binary file webapps/ssnc/WEB-INF/classes/com/phonepadgames/starwork/mvc/servlet/SwitchService.class matches

4、把SwitchService.class 拉来本地进行反编译
用JD-GUI 反编译工具: 下载地址:
https://github.com/java-decompiler/jd-gui/releases
安装会提示下载对应的JDK

反编译保存得到一个SwitchService.java 文件, 修改这个文件里的访问地址

#########################
import com.phonepadgames.starwork.common.util.WebUtil;
import com.phonepadgames.starwork.mvc.servlet.SwitchService;

public class SwitchService
{
public static String switchStrng = "1";
public static String URL = "http://www.acom/a/switch.php";

public static void reload() {
try {
String str = WebUtil.postData(URL, 5000);
switchStrng = str;
}
catch (Exception exception) {

  switchStrng = "1";
} 

}

public static boolean open() { return "0".equals(switchStrng); }
}

################

修改http://www.a.com/aswitch.php 为你自己部署的这个地址

另外要看下http://www.a.com/a/switch.php 这个文件是什么样子的, 能不能拿到源文件,侥幸的是这个文件只是获取一个0和1来控制的值,比较好办了

修改成自己部署的文件(找过可以跑这个PHP的环境部署上)http://test.com/a/switch.php
switcc.php 里面的内容1为关闭接口, 0 为开启接口

我们需要做打开, 里面switch.php 为0

5、重新编译SwitchService(这个过程比较复杂,我是在Linux上部署了对应带JDK1.8.0.221的环境,一般线上跑的上面jdk就什么JDK,大版本类似就行) 会碰到各类包的依赖, 如上面使用到了WebUtil; WebUtil.class 文件里还会用到其他引用类

参考如下编译方式(引用到了log4j-1.2.16.jar和WebUtil.class(用一个com.zip把WebUtil.class 整个带路径的文件给打包zip让其引用调用了) )
[email protected]:/usr/local/jdk1.8.0_221/test# javac -classpath /usr/local/jdk1.8.0_221/lib/log4j-1.2.16.jar:/usr/local/jdk1.8.0_221/test/com.zip com/phonepadgames/starwork/mvc/servlet/SwitchService.java

不报错就会在com/phonepadgames/starwork/mvc/servlet/ 下尝试一个队员的CLass文件

有报错就看报错,一个个的对应处理了

6、以上编译没有问题,拉下那个SwitchService.class对应的看是否修改掉了里面的接口地址

若改掉了,那就大功告成, 可以尝试把这个文件替换到线上验证下是否成功(切记之前的那个SwitchService.class文件一定要做个备份)

更新到线上,游戏正常登陆了, 也认了我修改的地址去做判断了

#tcpdump小知识:
查看HTTP GET请求
sudo tcpdump -s 0 -A ‘tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420‘

查看HTTP POST请求
sudo tcpdump -s 0 -A ‘tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)‘

查看HTTP请求响应头以及数据

  1. sudo tcpdump -A -s 0 ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)‘
  2. sudo tcpdump -X -s 0 ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)‘

原文地址:https://blog.51cto.com/holy2010/2439880

时间: 2024-08-03 07:58:47

记录一次通过反编译处理线上问题的相关文章

记处理线上记录垃圾日志 The view &#39;Error&#39; or its master was not found

最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Search/Error.aspx ~/Views/Search/Error.ascx ~/Views/Shared/Er

如何快速处理线上故障

概述 线上故障通常是指大规模的影响线上服务可用性的问题或者事件,通俗点讲就是:掉'坑'里了,这个'坑'就是线上故障!线上故障的处理过程可以形象地表达为:'踩坑'.'跳坑'.'填坑'.'避坑'. 线上故障的处理不仅是一项技术活,更是对技术人员/技术团队反应能力.决策能力.判定能力.组织能力的考验.面对突发的生产故障,需要快速定位问题,找到解决方案,快速实施解决方案并不是一件容易的事情.本文主要包括如下内容:线上故障处理的目标.思路.步骤.基础设施.本文是依据平时经历的生产故障排查和处理,总结一些肤

Help-IntelliJIDEA-2019-基础设置:10.Maven自动下载源码包,告别反编译,直接上源码注释

ylbtech-Help-IntelliJIDEA-2019-基础设置:10.Maven自动下载源码包,告别反编译,直接上源码注释 1.返回顶部 1. 10.Maven自动下载源码包,告别反编译,直接上源码注释Configure | Settings | Build, Execution, Deployment | Build Tools | Maven | Importing将Automatically Download 的 Source 勾上. 2. 2.返回顶部 3.返回顶部 4.返回顶部

apk 反编译用法 mac上apktool

一.先把需要的工具下载下来 链接地址 :链接: http://pan.baidu.com/s/1gdIW2bh 密码: 942d 二.把解压后的文件放到一个文件夹下,也可以用解压命令行   tar -xvf apktool1.5.2.tar.bz2 进入文件所放的文件夹,执行命令./apktool 三.反编译apk文件 把apk放到文件所在的目录,执行命令 ./apktool d  名称.apk,然后会在当前目录生成反编译后的文件夹,里面就是解压后的文件 四.从新打包,会把你当前反编译后的目录从

APK反编译得工具总结(转载)

Android反编译技术总结 转自UncleChen's Blog,作者:UncleChen 一.Apk反编译工具及其使用方法 1.原理 学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后的Apk里面都有什么文件,各种文件都是怎么生成的. 这里有两篇AndroidWeekly中推荐过的好文章: 浅析 Android 打包流程 Android构建过程分析 Apk技术也有非常多的技术可以学习,主要都是围绕着如何减小体积,如何提高打包速度展开,这里先不多说了.下面是一张基本的Apk文件结构

常见反编译产生错误 k__BackingField 解决办法

常见反编译产生错误 k__BackingField 解决办法     无聊反编译小蚂蚁出现上千的错同样的错 private bool <EnableRuntimeHandler>k__BackingField;        [CompilerGenerated]        private bool <EnableSDE>k__BackingField;        [CompilerGenerated]        private bool <EnableStopw

MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)

前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的,mac上也妥妥的.这里记录下在mac上所用的东西和流程. 总共需要三个软件,为了便于找到最新的版本,把官网也放后面: Apktool:http://ibotpeaches.github.io/Apktool/install/ 最新版本2.0.1 dex2jar: https://github.com

Android安全攻防战,反编译与混淆技术完全解析(上)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/49738023 之前一直有犹豫过要不要写这篇文章,毕竟去反编译人家的程序并不是什么值得骄傲的事情.不过单纯从技术角度上来讲,掌握反编译功能确实是一项非常有用的技能,可能平常不太会用得到,但是一旦真的需要用到的了,而你却不会的话,那就非常头疼了.另外既然别人可以反编译程序,我们当然有理由应该对程序进行一定程度的保护,因此代码混淆也是我们必须要掌握的一项技术.那么最近的两篇文章我们就围

MAC上反编译android apk-apktool, dex2jar, jd-jui安装使用

前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的,mac上也妥妥的.这里记录下在mac上所用的东西和流程. 总共需要三个软件,为了便于找到最新的版本,把官网也放后面: Apktool:最新版本2.0.1 dex2jar: 最新版本2.0 JD-GUI: 最新版本1.4.0 这三个软件Apktool的安装稍微麻烦点,其他都还好,基本上下载下来解压了就