Вы находитесь на странице: 1из 13

8/22/2017 Atlassian series of software crack research records - a book

Atlassian series of software crack


research records
作者 Shauway (/u/77c090dd9fd8)  attention
2017.03.16 19:25 Word Count 271 Read 899 Comments 1 Like 2 Appreciation 1
(/u/77c090dd9fd8)

Atlassian series of software crack research


records

statement

For personal study, study use, do not use for commercial purposes.

Based version

product version

Confluence 6.0.6

Jira Software 7.3.3

Bitbucket 4.14.2

Bamboo 5.15.3

Crucible & FishEye 4.3.1

License

Confluence

http://www.jianshu.com/p/20dbcf85f962 1/13
8/22/2017 Atlassian series of software crack research records - a book

Description=Confluence (Data Center)


ServerID=BSVW-4XDC-RWIW-M083
Organisation=Your Organisation
ContactEMail=example@example.com
LicenseTypeName=COMMERCIAL
NumberOfUsers=-1
Subscription=true
Evaluation=false
PurchaseDate=2017-03-14
CreationDate=2017-03-14
LicenseExpiryDate=unlimited
MaintenanceExpiryDate=253402257599855
LicenseID=LIDSEN-L9418768
SEN=SEN-L9418768
licenseVersion=2

conf.LicenseEdition=ENTERPRISE
conf.DataCenter=false
conf.active=true
conf.NumberOfUsers=-1
conf.Starter=false
conf.LicenseTypeName=COMMERCIAL

note:

1. If conf.DataCenter=true it LicenseExpiryDate can not be set to unlimited

see the following LicenseValidator


confluence - $ {version} .jar
com.atlassian.confluence.license.validator.DataCenterLicenseExpiryValidator

2. conf.DataCenter=true Can only be used in the production environment, the use of this
license, Confluence does not support the use of built-in database, you need to
configure the support of other databases.

Jira Software

http://www.jianshu.com/p/20dbcf85f962 2/13
8/22/2017 Atlassian series of software crack research records - a book

Description=JIRA Software (Data Center)


ServerID=BSVW-4XDC-RWIW-M083
Organisation=Your Organisation
ContactEMail=example@example.com
LicenseTypeName=COMMERCIAL
NumberOfUsers=-1
Subscription=true
Evaluation=false
PurchaseDate=2017-03-15
CreationDate=2017-03-15
LicenseExpiryDate=253402257599855
MaintenanceExpiryDate=253402257599855
LicenseID=LIDSEN-L9423264
SEN=SEN-L9423264
licenseVersion=2

greenhopper.LicenseEdition=ENTERPRISE
jira.NumberOfUsers=-1
jira.product.jira-software.active=true
jira.product.jira-software.DataCenter=false
jira.LicenseEdition=ENTERPRISE
greenhopper.LicenseTypeName=COMMERCIAL
jira.product.jira-software.NumberOfUsers=-1
jira.DataCenter=false
jira.product.jira-software.Starter=false
greenhopper.enterprise=true
jira.active=true
jira.LicenseTypeName=COMMERCIAL
greenhopper.active=true

Bitbucket (formerly Stash)

Description=Bitbucket (Data Center)


ServerID=BSVW-4XDC-RWIW-M083
Organisation=Your Organisation
ContactEMail=example@example.com
LicenseTypeName=COMMERCIAL
NumberOfUsers=-1
Subscription=true
Evaluation=false
PurchaseDate=2017-03-14
CreationDate=2017-03-14
LicenseExpiryDate=unlimited
MaintenanceExpiryDate=253402257599855
LicenseID=LIDSEN-L9418768
SEN=SEN-L9418768
licenseVersion=2

stash.LicenseTypeName=COMMERCIAL
stash.DataCenter=false
stash.active=true
stash.NumberOfUsers=-1
stash.Starter=false

Bamboo
http://www.jianshu.com/p/20dbcf85f962 3/13
8/22/2017 Atlassian series of software crack research records - a book

Description=Bamboo (Server) unlimited Remote Agents


ServerID=BSVW-4XDC-RWIW-M083
Organisation=Your Organisation
ContactEMail=example@example.com
LicenseTypeName=COMMERCIAL
NumberOfUsers=-1
Subscription=true
Evaluation=false
PurchaseDate=2017-03-14
CreationDate=2017-03-14
LicenseExpiryDate=unlimited
MaintenanceExpiryDate=253402257599855
LicenseID=LIDSEN-L9418768
SEN=SEN-L9418768
licenseVersion=2

bamboo.LicenseEdition=ENTERPRISE
bamboo.NumberOfBambooLocalAgents=-1
bamboo.active=true
bamboo.NumberOfBambooRemoteAgents=-1
bamboo.NumberOfBambooPlans=-1
bamboo.LicenseTypeName=COMMERCIAL

Crucible & FishEye

Description=Crucible (Server)
ServerID=B164-53DN-93PE-5MRN
Organisation=Your Organisation
ContactEMail=example@example.com
LicenseTypeName=COMMERCIAL
NumberOfUsers=-1
Subscription=true
Evaluation=false
PurchaseDate=2017-03-14
CreationDate=2017-03-14
LicenseExpiryDate=unlimited
MaintenanceExpiryDate=4102401599852
LicenseID=LIDSEN-L9418768
SEN=SEN-L9418768
licenseVersion=2

crucible.LicenseTypeName=COMMERCIAL
crucible.Starter=false
crucible.NumberOfUsers=-1
crucible.active=true

http://www.jianshu.com/p/20dbcf85f962 4/13
8/22/2017 Atlassian series of software crack research records - a book

Description=FishEye (Server)
ServerID=B164-53DN-93PE-5MRN
Organisation=Your Organisation
ContactEMail=example@example.com
LicenseTypeName=COMMERCIAL
NumberOfUsers=-1
Subscription=true
Evaluation=false
PurchaseDate=2017-03-14
CreationDate=2017-03-14
LicenseExpiryDate=unlimited
MaintenanceExpiryDate=4102401599852
LicenseID=LIDSEN-L9418768
SEN=SEN-L9418768
licenseVersion=2

fisheye.active=true
fisheye.Starter=false
fisheye.LicenseTypeName=COMMERCIAL
fisheye.NumberOfUsers=-1

License structure

License is a basee64 string, consisting of three parts

第一部分:License
第二部分:License版本号 固定值 X02
第三部分:第一部分长度 31进制形式

The first part of the above base64 decoding, but also by the following four parts

第一部分:第二部加第三部分的分长度 4个字节
第二部分:License前缀 当前为5个字节
第三部分:zip压缩后的License内容
第四部分:第二部加第三部分的签名

The signature algorithm is SHA1withDSA

Code
com.atlassian.extras.decoder.v2.Version2LicenseDecoder#checkAndGetLicenseText(String) metho
d

com.atlassian.extras.decoder.v2.Version2LicenseDecoder所在包

product Where the package


http://www.jianshu.com/p/20dbcf85f962 5/13
8/22/2017 Atlassian series of software crack research records - a book

$INSTALL_DIR/confluence/WEB-INF/lib/atlassian-extras-decoder-
Confluence
v2-3.2.jar

Jira Software $INSTALL_DIR/atlassian-jira/WEB-INF/lib/atlassian-extras-3.2.jar

$INSTALL_DIR/atlassian-bitbucket/WEB-INF/lib/atlassian-extras-
Bitbucket
decoder-v2-3.3.0.jar

$INSTALL_DIR/atlassian-bamboo/WEB-INF/lib/atlassian-extras-
Bamboo
decoder-v2-3.3.0.jar

Crucible &
$INSTALL_DIR/lib/atlassian-extras-2.5.jar
FishEye

Crack thinking

1. Will com.atlassian.extras.decoder.v2.Version2LicenseDecoder the


public be replaced own

2. According to the license structure, use your own private key to generate a license

Results

Crack success!

Replace the public key

反编 --> 替换公钥 --> 编译 --> 替换原jar包的class文件

Generate the license code

http://www.jianshu.com/p/20dbcf85f962 6/13
8/22/2017 Atlassian series of software crack research records - a book

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.Scanner;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;

/**
* @author Shauway <shauway@qq.com>
*/
public class AtlassianLicenseGenerator {
public static final String CONFLUENCE_SERVER_LICENSE_DESC = "Confluence (Server)";
public static final String CONFLUENCE_DATA_CENTER_LICENSE_DESC = "Confluence (Data Center)"
public static final String JIRA_SOFTWARE_SERVER_LICENSE_DESC = "Jira Software (Server)";
public static final String JIRA_SOFTWARE_DATA_CENTER_LICENSE_DESC = "Jira Software (Data Center)"
public static final String BITBUCKET_SERVER_LICENSE_DESC = "Bitbucket (Server)";
public static final String BITBUCKET_DATA_CENTER_LICENSE_DESC = "Bitbucket (Data Center)"
public static final String BAMBOO_SERVER_LICENSE_DESC = "Bamboo (Server) Unlimited Remote Agents"
public static final String CRUCIBLE_SERVER_LICENSE_DESC = "Crucible (Server)";
public static final String FISH_EYE_SERVER_LICENSE_DESC = "FishEye (Server)";
static String COMMON_LICENSE_CONTENT = "Description=$$licenseDesc$$\n" +
"ServerID=$$serverid$$\n" +
"Organisation=$$org$$\n" +
"ContactEMail=$$email$$\n" +
"LicenseTypeName=COMMERCIAL\n" +
"NumberOfUsers=-1\n" +
"Subscription=true\n" +
"Evaluation=false\n" +
"PurchaseDate=2017-03-14\n" +
"CreationDate=2017-03-14\n" +
"LicenseExpiryDate=$$license_expiry_date$$\n" +
"MaintenanceExpiryDate=$$maintenance_expiry_date$$\n" +
"LicenseID=LIDSEN-L9418768\n" +
"SEN=SEN-L9418768\n" +
"licenseVersion=2\n";
static String CONFLUENCE_SPECIAL_LICENSE_CONTENT = "conf.LicenseEdition=ENTERPRISE\n" +
"conf.DataCenter=$$data_center$$\n" +
"conf.active=true\n" +
"conf.NumberOfUsers=-1\n" +
"conf.Starter=false\n" +
"conf.LicenseTypeName=COMMERCIAL";
static String JIRA_SPECIAL_LICENSE_CONTENT = "greenhopper.LicenseEdition=ENTERPRISE\n" +
"jira.NumberOfUsers=-1\n" +
"jira.product.jira-software.active=true\n" +
"jira.product.jira-software.DataCenter=false\n" +
"jira.LicenseEdition=ENTERPRISE\n" +
"greenhopper.LicenseTypeName=COMMERCIAL\n" +
"jira.product.jira-software.NumberOfUsers=-1\n" +
"jira.DataCenter=$$data_center$$\n" +
"jira.product.jira-software.Starter=false\n" + 
"greenhopper.enterprise=true\n" +
"jira.active=true\n" +
"jira.LicenseTypeName=COMMERCIAL\n" +

http://www.jianshu.com/p/20dbcf85f962 7/13
8/22/2017 Atlassian series of software crack research records - a book
"greenhopper.active=true";
static String BITBUCKET_SPECIAL_LICENSE_CONTENT = "stash.LicenseTypeName=COMMERCIAL\n" +
"stash.DataCenter=$$data_center$$\n" +
"stash.active=true\n" +
"stash.NumberOfUsers=-1\n" +
"stash.Starter=false";
static String BAMBOO_SPECIAL_LICENSE_CONTENT = "bamboo.LicenseEdition=ENTERPRISE\n" +
"bamboo.NumberOfBambooLocalAgents=-1\n" +
"bamboo.active=true\n" +
"bamboo.NumberOfBambooRemoteAgents=-1\n" +
"bamboo.NumberOfBambooPlans=-1\n" +
"bamboo.LicenseTypeName=COMMERCIAL";
static String CRUCIBLE_SPECIAL_LICENSE_CONTENT = "crucible.LicenseTypeName=COMMERCIAL\n" +
"crucible.Starter=false\n" +
"crucible.NumberOfUsers=-1\n" +
"crucible.active=true";
static String FISH_SPECIAL_LICENSE_CONTENT = "fisheye.active=true\n" +
"fisheye.Starter=false\n" +
"fisheye.LicenseTypeName=COMMERCIAL\n" +
"fisheye.NumberOfUsers=-1";

static String LINE_SEPARATOR = System.getProperty("line.separator");


static Scanner scanner = new Scanner(System.in);

public static void main(String[] args) throws Exception {


StringBuffer prompt = new StringBuffer();
prompt.append("Select license type:").append(LINE_SEPARATOR);
prompt.append("\t11: ").append(CONFLUENCE_SERVER_LICENSE_DESC).append(LINE_SEPARATOR);
prompt.append("\t12: ").append(CONFLUENCE_DATA_CENTER_LICENSE_DESC).append(LINE_SEPARATOR);
prompt.append("\t21: ").append(JIRA_SOFTWARE_SERVER_LICENSE_DESC).append(LINE_SEPARATOR);
prompt.append("\t22: ").append(JIRA_SOFTWARE_DATA_CENTER_LICENSE_DESC).append(LINE_SEPARATOR);
prompt.append("\t31: ").append(BITBUCKET_SERVER_LICENSE_DESC).append(LINE_SEPARATOR);
prompt.append("\t32: ").append(BITBUCKET_DATA_CENTER_LICENSE_DESC).append(LINE_SEPARATOR);
prompt.append("\t4: ").append(BAMBOO_SERVER_LICENSE_DESC).append(LINE_SEPARATOR);
prompt.append("\t5: ").append(CRUCIBLE_SERVER_LICENSE_DESC).append(LINE_SEPARATOR);
prompt.append("\t6: ").append(FISH_EYE_SERVER_LICENSE_DESC).append(LINE_SEPARATOR);
System.out.print(prompt);
System.out.print(">> Input selected license type code: ");
int licenseTypeCode = scanner.nextInt();
switch (licenseTypeCode) {
case 11:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", CONFLUENCE_SERVER_LICENSE_DESC)
.replace("$$license_expiry_date$$", "unlimited")
.replace("$$maintenance_expiry_date$$", "253402257599855");
CONFLUENCE_SPECIAL_LICENSE_CONTENT = CONFLUENCE_SPECIAL_LICENSE_CONTENT.replace(
break;
case 12:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", CONFLUENCE_DATA_CENTER_LICENSE_DESC)
.replace("$$license_expiry_date$$", "253402257599855")
.replace("$$maintenance_expiry_date$$", "253402257599855");
CONFLUENCE_SPECIAL_LICENSE_CONTENT = CONFLUENCE_SPECIAL_LICENSE_CONTENT.replace(
break;
case 21:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", JIRA_SOFTWARE_SERVER_LICENSE_DESC)
.replace("$$license_expiry_date$$", "unlimited")
.replace("$$maintenance_expiry_date$$", "253402257599855");
JIRA_SPECIAL_LICENSE_CONTENT = JIRA_SPECIAL_LICENSE_CONTENT.replace("$$data_center$$" 
break;
case 22:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", JIRA_SOFTWARE_DATA_CENTER_LICENSE_DESC)

http://www.jianshu.com/p/20dbcf85f962 8/13
8/22/2017 Atlassian series of software crack research records - a book
.replace("$$license_expiry_date$$", "253402257599855")
.replace("$$maintenance_expiry_date$$", "253402257599855");
JIRA_SPECIAL_LICENSE_CONTENT = JIRA_SPECIAL_LICENSE_CONTENT.replace("$$data_center$$"
break;
case 31:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", BITBUCKET_SERVER_LICENSE_DESC)
.replace("$$license_expiry_date$$", "unlimited")
.replace("$$maintenance_expiry_date$$", "253402257599855");
BITBUCKET_SPECIAL_LICENSE_CONTENT = BITBUCKET_SPECIAL_LICENSE_CONTENT.replace(
break;
case 32:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", BITBUCKET_DATA_CENTER_LICENSE_DESC)
.replace("$$license_expiry_date$$", "253402257599855")
.replace("$$maintenance_expiry_date$$", "253402257599855");
BITBUCKET_SPECIAL_LICENSE_CONTENT = BITBUCKET_SPECIAL_LICENSE_CONTENT.replace(
break;
case 4:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", BAMBOO_SERVER_LICENSE_DESC)
.replace("$$license_expiry_date$$", "unlimited")
.replace("$$maintenance_expiry_date$$", "4102401599852");
break;
case 5:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", CRUCIBLE_SERVER_LICENSE_DESC)
.replace("$$license_expiry_date$$", "unlimited")
.replace("$$maintenance_expiry_date$$", "4102401599852");
break;
case 6:
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$licenseDesc$$", FISH_EYE_SERVER_LICENSE_DESC)
.replace("$$license_expiry_date$$", "unlimited")
.replace("$$maintenance_expiry_date$$", "4102401599852");
break;
default:
System.out.println("Invalid license type code!");
System.exit(1);
}
System.out.print(">> Input your server id: ");
String serverId = scanner.next();
System.out.print(">> Input your organisation name: ");
String organisation = scanner.next();
System.out.print(">> Input your email address: ");
String email = scanner.next();
COMMON_LICENSE_CONTENT = COMMON_LICENSE_CONTENT.replace("$$serverid$$", serverId)
.replace("$$org$$", organisation).replace("$$email$$", email);
String licenseContent = null;
switch (licenseTypeCode) {
case 11:
case 12:
licenseContent = COMMON_LICENSE_CONTENT + CONFLUENCE_SPECIAL_LICENSE_CONTENT;
break;
case 21:
case 22:
licenseContent = COMMON_LICENSE_CONTENT + JIRA_SPECIAL_LICENSE_CONTENT;
break;
case 31:
case 32:
licenseContent = COMMON_LICENSE_CONTENT + BITBUCKET_SPECIAL_LICENSE_CONTENT;
break; 
case 4:
licenseContent = COMMON_LICENSE_CONTENT + BAMBOO_SPECIAL_LICENSE_CONTENT;
break;

http://www.jianshu.com/p/20dbcf85f962 9/13
8/22/2017 Atlassian series of software crack research records - a book
case 5:
licenseContent = COMMON_LICENSE_CONTENT + CRUCIBLE_SPECIAL_LICENSE_CONTENT;
break;
case 6:
licenseContent = COMMON_LICENSE_CONTENT + FISH_SPECIAL_LICENSE_CONTENT;
break;
}
System.out.println();
System.out.println("Your license content. Enjoy it!");
System.out.println();
System.out.println(getLicense(licenseContent));
System.out.println();
System.out.println(licenseContent);
}

static PublicKey publicKey;


static PrivateKey privateKey;
static byte[] licenseTextPrefix = {13, 14, 12, 10, 15};

static {
try {
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(Base64.getUrlDecoder().decode(
privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(Base64.getUrlDecoder().decode(
} catch (Exception e) {
}
}

static String getLicense(String licenseContent) throws Exception {


byte[] licenseTextBytes = licenseContent.getBytes("UTF-8"); // 未压缩

Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION);


ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(baos2, deflater);
deflaterOutputStream.write(licenseTextBytes);
deflaterOutputStream.close();
byte[] licenseTextBytesZiped = baos2.toByteArray(); // 已压缩

Signature signature = Signature.getInstance("SHA1withDSA");


signature.initSign(privateKey);
signature.update(licenseTextPrefix);
signature.update(licenseTextBytesZiped);
byte[] sign = signature.sign();

ByteArrayOutputStream baos = new ByteArrayOutputStream();


DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(licenseTextBytesZiped.length + licenseTextPrefix.length);
dos.write(licenseTextPrefix);
dos.write(licenseTextBytesZiped);
dos.write(sign);

dos.close();
byte[] licenseContentBytes = baos.toByteArray();
String licenseContentBase64 = Base64.getEncoder().encodeToString(licenseContentBytes);
String licenseContentWithVersion = licenseContentBase64 + "X02";
return licenseContentWithVersion + Integer.toString(licenseContentBase64.length(), 31
} 
}

http://www.jianshu.com/p/20dbcf85f962 10/13
8/22/2017 Atlassian series of software crack research records - a book
 Journal (/nb/6329352) Report an article © Copyright by the author

Shauway (/u/77c090dd9fd8) 
 关注
Wrote 1399 words, was 4 people concerned, won four like
(/u/77c090dd9fd8)

If you think my article is useful to you, please feel free to appreciate. Your
support will encourage me to continue to create!

Appreciate support

 like (/sign_in?utm_source=desktop&utm_medium=not-signed-in-like-button) 2

   More sharing

(http://cwb.assets.jianshu.io/notes/images/10245937/weibo/image_1b98f9c64e63.jpg)

Login to (/sign_in?utm_source=desktop&utm_medium=not-signed-in-comment-form)
post a comment

1 review only look at the author

Sorted by the order of time according to the time sequence in reverse order

greatdino_fa73 (/u/549618cee23f)
2nd floor 2017.05.27 04:26
(/u/549618cee23f)

 Thumbs up  Reply

Was found in the following special income, found more similar content

tool (/c/9488dde3fd81?utm_source=desktop&utm_medium=notes- 
included-collection)

http://www.jianshu.com/p/20dbcf85f962 11/13
8/22/2017 Atlassian series of software crack research records - a book

DevOps tool (/c/e604c60c62aa?utm_source=desktop&utm_medium=notes-


included-collection)

Recommended reading more exciting content (/)

Linux connects to HP printers (/p/6bb4d52d66de?utm_campaign=mal…


Installing foo2zjs Using cups to manage printers By default, cups are only allowed to be managed from the
machine. Modify the cups configuration file to support from LAN management. Add the default network…

Shauway (/u/77c090dd9fd8?
utm_campaign=maleskine&utm_content=user&utm_medium=pc_all_hots&utm_source=recommendation)

How to use the home host to provide WEB services (/p/a3aa793726fc?…


Barriers home broadband is not fixed IP ddns unstable base telecom operators shielding the home
broadband 80,443 and other ports due to the existence of several problems above, your home WEB servi…

(/u/77c090dd9fd8?
Shauway
utm_campaign=maleskine&utm_content=user&utm_medium=pc_all_hots&utm_source=recommendation)

9 years later, I still did not run out! (/p/934090a0483… (/p/934090a0483f?


utm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_so
Sayings: 今天的故事,来自 9 年前经历了汶川大地震后幸存下来的人。 昨
晚,九寨沟发生了 7.0 级地震。无数人和我一样,想起了 9 年前的汶川。 截…

新世相 (/u/880b482939ec?
utm_campaign=maleskine&utm_content=user&utm_medium=pc_all_hots&utm_source=recommendation)

你告诉我,读书没有用 (/p/332b1c5f4b5a?utm_camp… (/p/332b1c5f4b5a?


utm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_so
文|南有南风 -1- 龙应台告诉她儿子: “我要求你读书用功,不是因为我要你跟别
人比成就,而是因为,我希望你将来拥有更多选择的权利,选择有意义、有…

南有南风 (/u/2b909da3afcb?
utm_campaign=maleskine&utm_content=user&utm_medium=pc_all_hots&utm_source=recommendation)

【深度】不打印度,中国在害怕什么? (/p/dac3339f18… (/p/dac3339f183d?


utm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_so
任何时候,轻视对手,都会犯不可挽回的错误。特别是在战争这种事关千万人身
家性命和国运走向的重大决策上。 01 被低估的三哥 最近一段时间,随着中印…

宗麟 (/u/0f043ebdbf2c?
utm_campaign=maleskine&utm_content=user&utm_medium=pc_all_hots&utm_source=recommendation) 

http://www.jianshu.com/p/20dbcf85f962 12/13
8/22/2017 Atlassian series of software crack research records - a book

 log in Register  Download the book App


Customize your content for you Discover and create content anytime, anywhere
(/sign_in?utm_source=desktop&utm_medium=note-bottom-bind)
(/apps/download?utm_source=desktop&utm_medium=click-note-bottom-bind)

http://www.jianshu.com/p/20dbcf85f962 13/13

Вам также может понравиться