• 某森游戏列表


    背景

    发现现在3A游戏大作基本上300起步,网上找了某森的游戏下载工具,还需要账号或者激活码。我之前买过某森的一个永久VIP,后来原淘宝网店没了,换了新皮,问客服要账号也不理人。怒!!!本来已经躺平了,垂死病中惊坐起,誓要研究一番!

    思路

    1、通过Fiddler classic、wireShark等抓包工具找到API接口地址。

    2、通过RestTemplate访问接口,发现接口地址竟然是公共服务。

    代码

    1、GameImg实体类

    1. import java.io.Serializable;
    2. import lombok.Data;
    3. @Data
    4. public class GameImg implements Serializable {
    5. private static final long serialVersionUID = 4995901746633163120L;
    6. private String id;
    7. private String gameId;
    8. private Integer orderNo;
    9. private String imgUrl;
    10. private String imgData;
    11. }

     2、GameData实体类

    1. import java.io.Serializable;
    2. import java.util.List;
    3. import lombok.Data;
    4. @Data
    5. public class GameData implements Serializable {
    6. private static final long serialVersionUID = -6932302826674271617L;
    7. private String id;
    8. private Integer deleted;
    9. private String creatorId;
    10. private String creatorName;
    11. private String createTime;
    12. private String modifierId;
    13. private String modifierName;
    14. private String modifyTime;
    15. private String name;
    16. private String pinyin;
    17. private String pinyinFirst;
    18. private Integer newGame;
    19. private Integer activeCount;
    20. private Integer playCount;
    21. private String encodeKey;
    22. private Integer sale;
    23. private Integer timeLimit;
    24. private String timeLimitNotice;
    25. private String headUrl;
    26. private String videoUrl;
    27. private String giftUrl;
    28. private String downloadUrl;
    29. private String downloadPassword;
    30. private String buyUrl;
    31. private String readmeUrl;
    32. private List gameDetailImages;
    33. private String redirectUrl;
    34. }

     3、单响应对象

    1. import java.io.Serializable;
    2. import lombok.Data;
    3. @Data
    4. public class RespSingleResult implements Serializable {
    5. private static final long serialVersionUID = 1820980857598297402L;
    6. private Boolean result;
    7. private Integer errorCode;
    8. private String msg;
    9. private GameData json;
    10. }

     4、多响应对象

    1. import java.io.Serializable;
    2. import java.util.List;
    3. import lombok.Data;
    4. @Data
    5. public class RespMutipleResult implements Serializable {
    6. private static final long serialVersionUID = 1820980857598297402L;
    7. private Boolean result;
    8. private Integer errorCode;
    9. private String msg;
    10. private List json;
    11. }

    5、单元测试

    1. import java.util.List;
    2. import org.haisen.crack.entity.GameData;
    3. import org.haisen.crack.entity.RespMutipleResult;
    4. import org.haisen.crack.entity.RespSingleResult;
    5. import org.junit.jupiter.api.Test;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.boot.test.context.SpringBootTest;
    8. import org.springframework.http.HttpEntity;
    9. import org.springframework.http.HttpHeaders;
    10. import org.springframework.http.MediaType;
    11. import org.springframework.http.ResponseEntity;
    12. import org.springframework.util.LinkedMultiValueMap;
    13. import org.springframework.util.MultiValueMap;
    14. import org.springframework.web.client.RestTemplate;
    15. import com.aspose.words.Document;
    16. import com.aspose.words.DocumentBuilder;
    17. import com.aspose.words.ImportFormatMode;
    18. @SpringBootTest
    19. class CrackApplicationTests {
    20. /**
    21. * 单个游戏数据基本信息
    22. */
    23. private static final String SINGLE_GAME_DATA_URL = "http://yx.haisenyouxi8.com/hsgame/game/getById";
    24. /**
    25. * 所有游戏数据基本信息
    26. */
    27. private static final String ALL_GAME_DATA_URL = "http://yx.haisenyouxi8.com/hsgame/game/query";
    28. private RestTemplate restTemplate;
    29. @Autowired
    30. public void setRestTemplate(RestTemplate restTemplate) {
    31. this.restTemplate = restTemplate;
    32. }
    33. /**
    34. * 获取单个游戏数据测试
    35. */
    36. @Test
    37. void getSingleGameTest() {
    38. if (null != this.restTemplate) {
    39. String url = SINGLE_GAME_DATA_URL;
    40. /**
    41. * 古墓丽影
    42. */
    43. String gameId = "caf5347414c34ff3bd18b578c1b6d60a";
    44. MultiValueMap map = new LinkedMultiValueMap();
    45. map.add("id", gameId);
    46. HttpHeaders headers = new HttpHeaders();
    47. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    48. HttpEntity> request = new HttpEntity>(map,
    49. headers);
    50. try {
    51. ResponseEntity ret = this.restTemplate.postForEntity(url, request,
    52. RespSingleResult.class);
    53. GameData s = ret.getBody().getJson();
    54. System.out.print(s.getName());
    55. System.out.print(" ");
    56. System.out.print(s.getDownloadUrl());
    57. System.out.print(" ");
    58. System.out.print(s.getDownloadPassword());
    59. System.out.println();
    60. } catch (Exception e) {
    61. e.printStackTrace();
    62. }
    63. }
    64. }
    65. /**
    66. * 获取所有游戏信息测试
    67. */
    68. @Test
    69. void getAllGamesTest() {
    70. if (null != this.restTemplate) {
    71. String url = ALL_GAME_DATA_URL;
    72. MultiValueMap map = new LinkedMultiValueMap();
    73. HttpHeaders headers = new HttpHeaders();
    74. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    75. HttpEntity> request = new HttpEntity>(map,
    76. headers);
    77. try {
    78. ResponseEntity ret = this.restTemplate.postForEntity(url, request,
    79. RespMutipleResult.class);
    80. List list = ret.getBody().getJson();
    81. list.stream().forEach(s -> {
    82. System.out.print(s.getName());
    83. System.out.print(" ");
    84. System.out.print(s.getDownloadUrl());
    85. System.out.print(" ");
    86. System.out.print(s.getDownloadPassword());
    87. System.out.println();
    88. });
    89. } catch (Exception e) {
    90. e.printStackTrace();
    91. }
    92. }
    93. }
    94. }

     6、测试结果

    古墓丽影9豪华版 https://pan.baidu.com/s/1xWixrZ2y46xYfEAt4zZXSA okd7

    后记

    1、接口服务器用的tomcat;

    2、接口服务公开,属于公共服务;

    3、百度网盘共享任何人;

    4、本篇仅用于技术研究哈。

  • 相关阅读:
    【java期末复习题】第9章 集合
    linux安装Dns
    【力扣C语言】每日一题
    QT基础入门【QSS】 伪状态,冲突解决、级联介绍
    弘辽科技:网店提升销量先提升流量吗?怎么提升流量?
    Vue组件化
    Apache shiro 漏洞总结
    滴滴前端二面vue相关面试题
    IDEA-2023-jdk8 HelloWorld的实现
    复旦微FMQL20SM全国产ARM+FPGA核心板,替代xilinx ZYNQ7020系列
  • 原文地址:https://blog.csdn.net/sword_happy/article/details/131758882