<html>
<head>
</head>
<body class='hmmessage'><div dir='ltr'>Hi,<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style><div dir="ltr"></div>
<div><br></div><div>Below is openappid detector for YoudaoDict app. There are OS-based clients and the detector below documents some of them. The code is commented to reflect the documentation. Pcaps available if needed (client/server).</div><div><br></div><div>My first approach to tackle this was to use logic/flow similar to "client_Gnutella.lua", however, there were pieces I couldn't find any documentation for and had no luck getting it to work. Will try to give it another shot.</div><div><span style="font-size: 12pt;"><br></span></div><div><font face="Courier New, sans-serif" size="2">--[[</font></div><div><font face="Courier New, sans-serif" size="2">detection_name: YoudaoDict Pro</font></div><div><font face="Courier New, sans-serif" size="2">version: 1</font></div><div><font face="Courier New, sans-serif" size="2">description: Detector for YoudaoDict dictation and dictionary clients (Windwos, OS X, Android). There is a client for iOS, but not tested (no emulator).</font></div><div><font face="Courier New, sans-serif" size="2">metadata: OpenAppID community</font></div><div><font face="Courier New, sans-serif" size="2">]]--</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">require "DetectorCommon"</font></div><div><font face="Courier New, sans-serif" size="2">local DC = DetectorCommon</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">gDetector = nil</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">DetectorPackageInfo = {</font></div><div><font face="Courier New, sans-serif" size="2">    name = 'YoudaoDict',</font></div><div><font face="Courier New, sans-serif" size="2">    proto = DC.ipproto.tcp,</font></div><div><font face="Courier New, sans-serif" size="2">    client = {</font></div><div><font face="Courier New, sans-serif" size="2">        init = 'DetectorInit',</font></div><div><font face="Courier New, sans-serif" size="2">        validate = 'DetectorValidate',</font></div><div><font face="Courier New, sans-serif" size="2">        clean = 'DetectorClean',</font></div><div><font face="Courier New, sans-serif" size="2">        minimum_matches = 1</font></div><div><font face="Courier New, sans-serif" size="2">    }</font></div><div><font face="Courier New, sans-serif" size="2">}</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">function DetectorInit(detectorInstance)</font></div><div><font face="Courier New, sans-serif" size="2">    gDetector = detectorInstance;</font></div><div><font face="Courier New, sans-serif" size="2">    DC.printf ('%s:DetectorInit()\n', DetectorPackageInfo.name)</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    --[[ There is a limitation on the maximum number of characters for the AppId passed to open_createApp</font></div><div><font face="Courier New, sans-serif" size="2">         Maximum number of allowed characters: 14</font></div><div><font face="Courier New, sans-serif" size="2">         Error message: Appname invalid</font></div><div><font face="Courier New, sans-serif" size="2">         Need to be added to OpenAppID documentation</font></div><div><font face="Courier New, sans-serif" size="2">    ]]--</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    -- Detector for the Android client</font></div><div><font face="Courier New, sans-serif" size="2">    gAppId = gDetector:open_createApp('youdaodict_and')</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    if gDetector.open_addHttpPattern then</font></div><div><font face="Courier New, sans-serif" size="2">        gDetector:open_addHttpPattern(2, 5, 0, gAppId, 0, "youdaodict")</font></div><div><font face="Courier New, sans-serif" size="2">        gDetector:open_addHttpPattern(2, 5, 0, gAppId, 0, "Android")</font></div><div><font face="Courier New, sans-serif" size="2">    end</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    -- Detector for Windows</font></div><div><font face="Courier New, sans-serif" size="2">    gAppId = gDetector:open_createApp('youdaodict_win')</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    if gDetector.open_addHttpPattern then</font></div><div><font face="Courier New, sans-serif" size="2">        gDetector:open_addHttpPattern(2, 5, 0, gAppId, 0, "youdaodict")</font></div><div><font face="Courier New, sans-serif" size="2">        gDetector:open_addHttpPattern(2, 5, 0, gAppId, 0, "(windowspc)")</font></div><div><font face="Courier New, sans-serif" size="2">    end</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    -- Detector for Windows client</font></div><div><font face="Courier New, sans-serif" size="2">    gAppId = gDetector:open_createApp('youdaodict_winc')</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    if gDetector.open_addHttpPattern then</font></div><div><font face="Courier New, sans-serif" size="2">        gDetector:open_addHttpPattern(2, 5, 0, gAppId, 0, "Youdao Desktop Dict")</font></div><div><font face="Courier New, sans-serif" size="2">        gDetector:open_addHttpPattern(2, 5, 0, gAppId, 0, "Windows")</font></div><div><font face="Courier New, sans-serif" size="2">    end</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    --[[ Detector for OS X. There are two versions of the same app</font></div><div><font face="Courier New, sans-serif" size="2">         One can be dowanloaded directly from the app website (tested below)</font></div><div><font face="Courier New, sans-serif" size="2">         Second can be downloaded from AppStore (not tested)</font></div><div><font face="Courier New, sans-serif" size="2">    ]]--</font></div><div><font face="Courier New, sans-serif" size="2">    gAppId = gDetector:open_createApp('youdaodict_osx')</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    if gDetector.open_addHttpPattern then</font></div><div><font face="Courier New, sans-serif" size="2">        gDetector:open_addHttpPattern(2, 5, 0, gAppId, 0, "\230\156\137\233\129\147\232\175\141\229\133\184")</font></div><div><font face="Courier New, sans-serif" size="2">        gDetector:open_addHttpPattern(2, 5, 0, gAppId, 0, "Darwin")</font></div><div><font face="Courier New, sans-serif" size="2">    end</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    return gDetector;</font></div><div><font face="Courier New, sans-serif" size="2">end</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">function DetectorValidator()</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    -- no logic here since validator is not called when traffic is HTTP.</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">    local context = {}</font></div><div><font face="Courier New, sans-serif" size="2">    return clientFail(context)</font></div><div><font face="Courier New, sans-serif" size="2">end</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font face="Courier New, sans-serif" size="2">function DetectorFini()</font></div><div><font face="Courier New, sans-serif" size="2">end</font></div><div><font face="Courier New, sans-serif" size="2"><br></font></div><div><font size="3">Thanks.</font></div><div><font size="3">YM</font></div>                                           </div></body>
</html>