diff --git a/enzevalos_iphone/Typosquatting.swift b/enzevalos_iphone/Typosquatting.swift index 7f6ee372abd5abbb4857c9f187eac3b62c8e5f67..7e324ae6b554f6363fc2f1b1cfeb5618d199af46 100644 --- a/enzevalos_iphone/Typosquatting.swift +++ b/enzevalos_iphone/Typosquatting.swift @@ -34,15 +34,14 @@ class Typosquatting { Returns an dictionary with the urls as the keys and and a bollean if it fits the allowed editdistance as value isAllowedDistance is false: if the URL's root domain has an unallowed edit distance with any other root domain. */ - func compareURLsDic(url: String, urls: [String]) -> [String:String] { + func compareURLsAsDic(url: String, urls: [String], allowedEditDistance: Int) -> [String:String] { let rootDomain = url.getRootDomain() var isAllowedEditDistance = true var typoDic: [String:String] = [:] for url in urls { let rd = url.getRootDomain() - if !rootDomain.isAllowedDistance(str: rd, allowedEditDistance: 4) { + if !rootDomain.isAllowedDistance(str: rd, allowedEditDistance: allowedEditDistance) { // 2 domains contain less than 4 differences --> warning here needed - print("Warning!! \n Edit distance is not in the allowed range between link: " + url + " and link: " + url) isAllowedEditDistance = false typoDic.updateValue(String(isAllowedEditDistance), forKey : url) isAllowedEditDistance = true @@ -58,7 +57,7 @@ class Typosquatting { Compares a url's root domain with all root domain of all elements in a givin url list. Retruns an dictionary with the URLs as keys and the Editdistance as value */ - func getURLEditdistance(url: String, urls: [String]) -> [String:String] { + func getURLEditdistanceAsDic(url: String, urls: [String]) -> [String:String] { let rootDomain = url.getRootDomain() var urlEditDic: [String:String] = [:] var editDistance = 0 @@ -80,7 +79,6 @@ class Typosquatting { for domain in domains { if !secondLevelDomain.isAllowedDistance(str: domain, allowedEditDistance: 4) { // 2 domains contain less than 4 differences --> warning here needed - print("Warning!! \n Edit distance is not in the allowed range between domain: " + secondLevelDomain + " and domain: " + domain) isAllowedEditDistance = false } } @@ -88,18 +86,17 @@ class Typosquatting { } /** - Compares a url's second level domain with all domains of all elements in a givin url list. - Returns an dictionary with the domains as the keys and and a bollean if it fits the allowed editdistance as value + Compares a url's second level domain with all domains of all elements in a givin second level domain list. + Returns an dictionary with the domains as the keys and and a boolean if it fits the allowed edit-distance as value isAllowedDistance is false: if the URL's second level domain has an unallowed edit distance with any other domain. */ - func compareURLWithSLDListDic(url: String, domains: [String]) -> [String:String] { + func compareURLWithSLDListAsDic(url: String, domains: [String], allowedEditDistance: Int) -> [String:String] { let secondLevelDomain = url.getSecondLevelDomain() var isAllowedEditDistance = true var typoDic: [String:String] = [:] for domain in domains { - if !secondLevelDomain.isAllowedDistance(str: domain, allowedEditDistance: 4) { + if !secondLevelDomain.isAllowedDistance(str: domain, allowedEditDistance: allowedEditDistance) { // 2 domains contain less than 4 differences --> warning here needed - print("Warning!! \n Edit distance is not in the allowed range between link: " + url + " and link: " + domain) isAllowedEditDistance = false typoDic.updateValue(String(isAllowedEditDistance), forKey : domain) isAllowedEditDistance = true @@ -115,7 +112,7 @@ class Typosquatting { Compares a url's second-level domain with all elements of a givin domain list. Retruns an dictionary with the second level domain as keys and the editdistance as value */ - func getSLDEditdistance(url: String, domains: [String]) -> [String:String] { + func getSLDEditdistanceAsDic(url: String, domains: [String]) -> [String:String] { let secondLevelDomain = url.getSecondLevelDomain() var sldEditDic: [String:String] = [:] var editDistance = 0 @@ -130,12 +127,11 @@ class Typosquatting { Compares a second-level domain with all elements of a givin second-level domain list. false: if the second-level domain has an unallowed edit distance with any other domain. */ - func compareDomainWithDomians(secondLvlDomain: String, domains: [String]) -> Bool { + func compareDomainWithDomians(secondLvlDomain: String, domains: [String], allowedEditDistance: Int) -> Bool { var isAllowedEditDistance = true for domain in domains { - if !secondLvlDomain.isAllowedDistance(str: domain, allowedEditDistance: 4) { + if !secondLvlDomain.isAllowedDistance(str: domain, allowedEditDistance: allowedEditDistance) { // 2 domains contain less than 4 differences --> warning here needed - print("Warning!! \n Edit distance is not in the allowed range between domain: " + secondLvlDomain + " and domain: " + domain) isAllowedEditDistance = false } } @@ -144,16 +140,15 @@ class Typosquatting { /** Compares a second level domain with all elements of a givin second-level domain list. - Returns an dictionary with the domains as the keys and and a bollean if it fits the allowed editdistance as value + Returns an dictionary with the domains as the keys and and a boolean if it fits the allowed editdistance as value isAllowedDistance is false: if the second level domain has an unallowed edit distance with any other domain. */ - func compareDomainWithDomiansDic(secondLvlDomain: String, domains: [String]) -> [String:String] { + func compareDomainWithDomiansAsDic(secondLvlDomain: String, domains: [String], allowedEditDistance: Int) -> [String:String] { var isAllowedEditDistance = true var typoDic: [String:String] = [:] for domain in domains { - if !secondLvlDomain.isAllowedDistance(str: domain, allowedEditDistance: 4) { + if !secondLvlDomain.isAllowedDistance(str: domain, allowedEditDistance: allowedEditDistance) { // 2 domains contain less than 4 differences --> warning here needed - print("Warning!! \n Edit distance is not in the allowed range between link: " + secondLvlDomain + " and link: " + domain) isAllowedEditDistance = false typoDic.updateValue(String(isAllowedEditDistance), forKey : domain) isAllowedEditDistance = true @@ -169,7 +164,7 @@ class Typosquatting { Compares a domain with all elements of a givin domain list. Retruns an dictionary with domains as keys and the editdistance as value */ - func getDomainEditDistance(domain: String, domains: [String]) -> [String:String] { + func getDomainEditDistanceAsDic(domain: String, domains: [String]) -> [String:String] { var domainEditDic: [String:String] = [:] var editDistance = 0 for dom in domains { diff --git a/enzevalos_iphoneTests/phishing/TyposquattingTests.swift b/enzevalos_iphoneTests/phishing/TyposquattingTests.swift index 52c391546b0f941d1d64df784c834ce7b445f5e3..71da2909f5dd81435693f75ecd86855db0a10696 100644 --- a/enzevalos_iphoneTests/phishing/TyposquattingTests.swift +++ b/enzevalos_iphoneTests/phishing/TyposquattingTests.swift @@ -14,23 +14,76 @@ class TyposquattingTests: XCTestCase { let typosquatting = Typosquatting() - var vaildRD = ["fu-berlin.de", "google.de", "nljbjkjk.de", "w3schools.com", "w2schools.com", "w8schools.com", "w33schools.com", "w22schools.com", "w99schools.eu.com", "3schools.com"] + var validRD = ["fu-berlin.de", "google.de", "nljbjkjk.de", "w3schools.com", "w2schools.com", "w8schools.com", "w33schools.com", "w22schools.com", "w99schools.eu.com", "3schools.com"] + + var validSLD = ["fu-berlin", "google", "nljbjkjk", "w3schools", "w2schools", "w8schools", "w33schools", "w22schools", "w99schools.eu", "3schools"] + + var validURLs = ["www.fu-berlin.de", "www.google.de", "nljbjkjk.com", "www.w3schools.com", "www.w2schools.com", "www.w8schools.de", "www.w33schools.com", "www.w22schools.com", "www.w99schools.eu.com", "www.3schools.com"] + // Setup for Critical Pattern of a Root Domain var testMailText = "https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240http:// www.google.de http://nljbjkjk.de https://www.w3schools.com https://www.w2schools.com https://www.w8schools.com https://www.w33schools.com https://www.w22schools.com https://www.w99schools.eu.com https://git.imp.fu-ber_lin.de/enzevalos/enzevalos_iphone/issues/240 http://www.google-.de http://nljbj#kjk.de https://www.3schools.com https://www.w2sc..hools.com https://www.w8sch?ools.com https://www.w33sc_hools.com https://www.w22schooIs.com https://www.W99schools$.com" - func testIsValidRD(){ + + + func testIsValidRD() { let pattern = typosquatting.isValidRD(mailBody: testMailText) XCTAssertNotNil(pattern) - XCTAssertEqual(pattern[0], vaildRD[0]) - XCTAssertEqual(pattern[1], vaildRD[1]) - XCTAssertEqual(pattern[2], vaildRD[2]) - XCTAssertEqual(pattern[3], vaildRD[3]) - XCTAssertEqual(pattern[4], vaildRD[4]) - XCTAssertEqual(pattern[5], vaildRD[5]) - XCTAssertEqual(pattern[6], vaildRD[6]) - XCTAssertEqual(pattern[7], vaildRD[7]) - XCTAssertEqual(pattern[8], vaildRD[8]) - XCTAssertEqual(pattern[9], vaildRD[9]) + XCTAssertEqual(pattern[0], validRD[0]) + XCTAssertEqual(pattern[1], validRD[1]) + XCTAssertEqual(pattern[2], validRD[2]) + XCTAssertEqual(pattern[3], validRD[3]) + XCTAssertEqual(pattern[4], validRD[4]) + XCTAssertEqual(pattern[5], validRD[5]) + XCTAssertEqual(pattern[6], validRD[6]) + XCTAssertEqual(pattern[7], validRD[7]) + XCTAssertEqual(pattern[8], validRD[8]) + XCTAssertEqual(pattern[9], validRD[9]) + } + + func testCompareDomainWithDomians() { + let domain = "w2schools" + XCTAssertFalse(typosquatting.compareDomainWithDomians(secondLvlDomain: domain, domains: validSLD, allowedEditDistance: 4)) + } + + func testGetDomainEditDistance() { + let domain = "w2schools" + print(typosquatting.getDomainEditDistanceAsDic(domain: domain, domains: validSLD)) + } + + func testCompareDomainWithDomiansDic() { + let domain = "w2schools" + print(typosquatting.compareDomainWithDomiansAsDic(secondLvlDomain: domain, domains: validSLD, allowedEditDistance: 4)) + } + + func testGetSLDEditdistance() { + let url = "www.w2schools.com" + print(typosquatting.getSLDEditdistanceAsDic(url: url, domains: validSLD)) + } + + func testGetURLEditdistanceAsDic() { + let url = "www.w2schools.com" + print(typosquatting.getURLEditdistanceAsDic(url: url, urls: validURLs)) + } + + func testCompareURLWithSLDListAsDic() { + let url = "www.w2schools.com" + print(typosquatting.compareURLWithSLDListAsDic(url: url, domains: validSLD, allowedEditDistance: 4)) + } + + func testCompareURLWithSLDList() { + let url = "www.google.com" + let domains = ["googIe", "google", "gogle", "gooGle", "gle", "glllll"] + XCTAssertFalse(typosquatting.compareURLWithSLDList(url: url, domains: domains)) + } + + func testCompareURLsAsDic() { + let url = "www.google.com" + print(typosquatting.compareURLsAsDic(url: url, urls: validURLs, allowedEditDistance: 4)) + } + + func testCompareURLs() { + let url = "www.w2schools.com" + XCTAssertFalse(typosquatting.compareURLs(url: url, urls: validURLs)) } } diff --git a/enzevalos_iphoneTests/phishing/UrlStringExtensionTests.swift b/enzevalos_iphoneTests/phishing/UrlStringExtensionTests.swift index d8003858130227ec51a84f248b3a93f0815fe968..742e63872269541e2cf662ad8516f099816205fe 100644 --- a/enzevalos_iphoneTests/phishing/UrlStringExtensionTests.swift +++ b/enzevalos_iphoneTests/phishing/UrlStringExtensionTests.swift @@ -125,24 +125,6 @@ class UrlStringExtensionTests: XCTestCase { XCTAssertEqual(pattern[9], vaildRD[9]) } - func testCompareURL() { - let url = "www.google.com" - let urls = ["www.googIe.com/klsdkhl", "https://www.google.com/maps?client=safari&sxsrf=", "www.gogle.com", "www.google.de", "www.outlook.com"] - XCTAssertFalse(url.compareURLs(urls: urls)) - } - - func testcompareURLsDic(){ - let url = "www.google.com" - let urls = ["www.googIe.com/klsdkhl", "https://www.google.com/maps?client=safari&sxsrf=", "www.gogle.com", "www.google.de", "www.outlook.com"] - print("resultlist:", url.compareURLsDic(urls: urls)) - } - - func testCompareURLWithSLDList() { - let url = "www.google.com" - let domains = ["googIe", "google", "gogle", "gooGle", "gle", "glllll"] - XCTAssertFalse(url.compareURLWithSLDList(domains: domains)) - } - func testIsAllowedDistance() { let str = "google" // #distance: 0 1 2 3 4 <